Uso di un singolo sistema () Chiamata per eseguire più comandi in C
Domanda
In un laboratorio di sicurezza delle informazioni a cui sto lavorando, mi è stato assegnato il compito di eseguire più comandi con una sola chiamata a " system () " (scritto in C, in esecuzione su Fedora). Qual è la sintassi che mi permetterà di eseguire più del comando tramite system ()? (L'idea è che potresti eseguire comandi arbitrari attraverso un programma in esecuzione su un computer remoto, se il programma interagisce con il sistema operativo attraverso la chiamata di sistema ().
cioè:.
char command[] = "????? \r\n";
system(command);
Soluzione
Dipende dalla shell invocata per eseguire i comandi, ma in generale la maggior parte delle shell usa ;
per separare i comandi, quindi qualcosa del genere dovrebbe funzionare:
command1; command2; command3
[EDIT]
Come menzionato @dicroce, puoi usare & amp; & amp;
invece di ;
che interromperà l'esecuzione al primo comando che restituisce un valore diverso da zero. Ciò può essere desiderato o meno (e alcuni comandi potrebbero restituire un valore diverso da zero in caso di successo) ma se si sta tentando di gestire comandi che possono fallire, è probabile che non si debbano mettere insieme più comandi in una chiamata di sistema () poiché non si dispone qualsiasi modo per determinare dove si è verificato l'errore. In questo caso, la soluzione migliore sarebbe quella di eseguire un comando alla volta o creare uno script di shell che esegua la corretta gestione degli errori e chiamarlo invece.
Altri suggerimenti
Usa & amp; & amp; tra i tuoi comandi. Ha il vantaggio di continuare a eseguire comandi solo se restituiscono codici di errore riusciti. Esempio:
" cd / proc & amp; & amp; cat cpuinfo "
Viene immediatamente in mente una possibilità. È possibile scrivere tutti i comandi in uno script, quindi eseguirlo con:
system ("cmd.exe /c \"x.cmd\"");
o, ora che ho notato che stai correndo su Fedora:
system ("x.sh");