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);
È stato utile?

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");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top