在C中使用单个system()调用执行多个命令

8

我正在从事一项关于信息安全的实验,我的任务是通过单次调用 "system()"(使用C编写,在Fedora上运行)来执行多个命令。请问如何编写语法使我能够通过 system() 执行多个命令? (这个想法是,如果程序通过 system() 调用与操作系统交互,那么你可以通过远程计算机上运行的程序执行任意命令。)

例如:

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

除非您正在运行Windows操作系统,否则回车符(\r)可能会带来麻烦而不是好处。您应该能够通过换行符或分号将命令分开,正如其他人所建议的那样。 - Jonathan Leffler
1
就安全而言,允许远程程序执行任意命令通常是一个棘手的过程。如果程序在本地以远程用户的权限运行,则最不严重;如果它以任何形式的提升权限运行,则情况就非常严重。 - Jonathan Leffler
3个回答

15

这取决于被调用以执行命令的shell,但通常大多数shell使用;来分隔命令,因此像这样的东西应该可以工作:

command1; command2; command3

[编辑]

如@dicroce所提到的,您可以使用&&代替;,这将在第一个返回非零值的命令处停止执行。这可能是期望的(有些命令可能在成功时返回非零),但如果您正在尝试处理可能失败的命令,则应该不要在系统()调用中连接多个命令,因为您无法确定故障发生的位置。在这种情况下,您最好一次执行一个命令或创建一个执行适当错误处理的shell脚本,并调用该脚本。


8

在你的命令之间使用“&&”连接。这样做的好处是,只要命令返回成功的错误代码,它就会继续执行命令。例如:

"cd /proc && cat cpuinfo"


1

有一个可能性立即浮现在脑海中。您可以将所有命令写入脚本,然后使用以下命令运行它:

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

或者,既然我注意到你正在使用Fedora:

system ("x.sh");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接