Использование одного вызова system() для выполнения нескольких команд на C

StackOverflow https://stackoverflow.com/questions/245600

  •  05-07-2019
  •  | 
  •  

Вопрос

В лаборатории информационной безопасности, над которой я работаю, мне было поручено выполнить несколько команд с помощью одного вызова "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");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top