Utilizzare popen
se si desidera eseguire un comando di shell e si desidera che il processo padre sia in grado di comunicare con il figlio. (Aggancia l'input del figlio o restituisce l'output al flusso che si riceve.) Altrimenti, preferire la famiglia di funzioni exec
(probabilmente in combinazione con fork
); I processi di exec
ereditano la maggior parte dei descrittori di file aperti (inclusi stdin, stdout e stderr), quindi è possibile collegare l'input e l'output a qualsiasi cosa si desideri ... inoltre, ci sono meno implicazioni sulla sicurezza.
system
è generalmente meglio evitato a meno che non sia necessario eseguire i comandi della shell. Genera una shell per eseguire il comando e la shell può analizzare il comando in qualsiasi modo desideri. In particolare, alcune variabili d'ambiente (come $IFS
e/o $PATH
) possono essere modificate in modo tale da far sì che il genitore esegua programmi a cui non si è mai destinati. Anche se popen
sembra fare la stessa cosa, almeno fornisce funzionalità che lo rendono utile nel caso generale.
'man popen' e' sistema uomo'? –
Hai provato a usare il popen()? o è il problema con te binario? L'ultima modifica è un po 'confusa – henryyao
L'uso di 'popen' invece di' system' non aiuta il tuo problema reale: il processo si blocca. – Wolf