Utilizzo di argv [0]

-1

Ultimamente ho scoperto che il latex e pdftex (con qualche altro) binari in Ubuntu sono gli stessi:

lrwxrwxrwx  1 root root          6 лип 29 18:03 latex -> pdftex*
lrwxrwxrwx  1 root root          6 лип 29 18:03 pdflatex -> pdftex*
lrwxrwxrwx  1 root root          6 лип 17 20:22 pdfcslatex -> pdftex*

L'esecuzione di tutti senza opzioni produce risultati diversi; quindi, suppongo che utilizzino argv[0] .

Qual è il vantaggio dell'utilizzo di argv[0] invece di compilare più file binari? E quali altri usi di argv[0] è possibile?

    
posta m0nhawk 30.10.2014 - 11:39
fonte

3 risposte

3

Ne risulta una dimensione complessiva più piccola dell'eseguibile quando vi sono molte funzionalità condivise. Questo è portato all'estremo da busybox , che ha centinaia di comandi ottimizzati per le dimensioni tutti collegati allo stesso binario e distinti tramite argv [0 ].

Ci sono solo altri due modi utili di usarlo di cui sono a conoscenza:

  • È utile utilizzarlo nei messaggi di aiuto che mostrano l'utilizzo della riga di comando, in modo che la guida faccia riferimento allo stesso comando che l'utente ha usato anche se il file binario è simulato o rinominato con un nome diverso rispetto all'originale
  • Alcuni programmi scrivono al suo interno per fornire un modo per mostrare il feedback sullo stato che verrà visualizzato in ps
risposta data 30.10.2014 - 11:45
fonte
1

Fondamentalmente riguarda lo sforzo generale risparmiato. Spedire diversi binari sottilmente diversi è uno spreco di spazio su disco, sforzo di compilazione (richiede più compilazioni per ogni versione), sforzo amministrativo (necessità di mantenere più obiettivi di costruzione e più progetti), ecc. E le cose che differiscono tra questi binari sono relativamente semplicemente condizionali che verrebbero probabilmente generati automaticamente dallo stesso file sorgente tramite le direttive del compilatore; quindi è più facile andare dinamici fino in fondo e fare le distinzioni in-language tramite i costrutti if corretti piuttosto che i comandi di preprocessore fastidiosi.

    
risposta data 30.10.2014 - 11:44
fonte
1

Se un sacco di codice viene riutilizzato attraverso i comandi, come l'analisi di un file e la conversione in un altro formato, ciò impedisce principalmente eseguibili duplicati. Puoi farlo anche con un comando e degli argomenti uber.

Questo ha il rovescio della medaglia che dipende dal modo in cui viene chiamato l'eseguibile, una persona ingenua può copiare il file eseguibile e rinominarlo, che quindi gli impedirà di funzionare come previsto.

    
risposta data 30.10.2014 - 11:54
fonte

Leggi altre domande sui tag