Использование одного вызова system () для выполнения нескольких команд в C - PullRequest
7 голосов
/ 29 октября 2008

В лаборатории информационной безопасности, над которой я работаю, мне было поручено выполнить несколько команд одним вызовом «system ()» (написанным на C, работающим на Fedora). Какой синтаксис позволит мне выполнять больше, чем команда через system ()? (Идея в том, что вы можете выполнять произвольные команды через программу, запущенную на удаленном компьютере, если программа взаимодействует с ОС через вызов system ().)

т.е:.

char command[] = "????? \r\n"; 
system(command);

Ответы [ 3 ]

14 голосов
/ 29 октября 2008

Это зависит от того, какая оболочка вызывается для выполнения команд, но, как правило, большинство оболочек используют ; для разделения команд, поэтому что-то вроде этого должно работать:

command1; command2; command3

[EDIT]

Как упоминалось @dicroce, вы можете использовать && вместо ;, что остановит выполнение первой команды, которая возвращает ненулевое значение. Это может или не может быть желательным (и некоторые команды могут возвращать ненулевое значение в случае успеха), но если вы пытаетесь обработать команды, которые могут потерпеть неудачу, вам, вероятно, не следует объединять несколько команд в вызове system (), поскольку у вас нет любой способ определить, где произошел сбой. В этом случае вам лучше всего выполнить одну команду за раз или создать сценарий оболочки, который выполняет соответствующую обработку ошибок, и вместо этого вызывать его.

8 голосов
/ 29 октября 2008

Используйте && между вашими командами. Преимущество состоит в том, что он продолжает выполнять команды, только если они возвращают успешные коды ошибок. Пример:

"cd / proc && cat cpuinfo"

1 голос
/ 29 октября 2008

Одна возможность сразу приходит на ум. Вы можете написать все команды для скрипта, а затем запустить его с помощью:

system ("cmd.exe /c \"x.cmd\"");

или, теперь, когда я заметил, что вы работаете в Fedora:

system ("x.sh");
...