Использование одного вызова system() для выполнения нескольких команд на C
Вопрос
В лаборатории информационной безопасности, над которой я работаю, мне было поручено выполнить несколько команд с помощью одного вызова "system()" (написана на C, работает в Fedora).Каков синтаксис, который позволит мне выполнить нечто большее, чем команду, через system()?(Идея заключается в том, что вы могли бы выполнять произвольные команды через программу, запущенную на удаленном компьютере, если программа взаимодействует с ОС через вызов system().)
То есть.:
char command[] = "????? \r\n";
system(command);
Решение
Это зависит от оболочки, вызываемой для выполнения команд, но в целом большинство оболочек используют ;
чтобы разделить команды, так что должно сработать что-то вроде этого:
command1; command2; command3
[ПРАВИТЬ]
Как упоминал @dicroce, вы можете использовать &&
вместо того , чтобы ;
который остановит выполнение при первой команде, возвращающей ненулевое значение.Это может быть желательным, а может и не быть (и некоторые команды могут возвращать ненулевое значение при успешном выполнении), но если вы пытаетесь обработать команды, которые могут привести к сбою, вам, вероятно, не следует объединять несколько команд в вызов system(), поскольку у вас нет никакого способа определить, где произошел сбой.В этом случае лучше всего было бы либо выполнять по одной команде за раз, либо создать сценарий оболочки, который выполняет соответствующую обработку ошибок, и вызвать его вместо этого.
Другие советы
Используйте && между вашими командами.Его преимущество в том, что он продолжает выполнять команды только до тех пор, пока они возвращают успешные коды ошибок.Пример:
"cd /proc && cat cpuinfo"
Сразу приходит на ум одна возможность.Вы могли бы записать все команды в скрипт, а затем запустить его с:
system ("cmd.exe /c \"x.cmd\"");
или, теперь, когда я заметил, что вы работаете на Fedora:
system ("x.sh");