在windows API中创建进程我们有CreateProcess功能.
现在让我们考虑一下我们要创建进程和运行DIR /X命令.当然在Windows中没有可执行文件DIR.exe,我们不能只是传递给它CreateProcess.那么该怎么办?
解决这个问题非常简单.我们应该通过cmd /C "DIR /X"(作为第二个论点)CreateProcess.
现在让我们尝试在unix中做同样的事情(不是用DIR /X,而是用ls | wc).
在unix中,我将用于fork + execvp创建新进程并执行命令.为什么我希望我的命令是ls | wc,因为在类似Unix的单一命令ls,grep,ps是可执行文件,并且可以通过单独执行exec(即不作为的说法sh,bash...).
所以在这里似乎我们可以"ls | wc"作为参数传递sh.(即我们可以sh -c "ls | wc"将它们标记化并传递给它们execvp).但是Oooops,这不起作用!
char *arg[] = {"sh", "-c", "\"ls | wc\"", NULL};
execvp(arg[0], arg);
Run Code Online (Sandbox Code Playgroud)
所以问题.我该如何解决这个问题?
PS在Windows中如果安装cygwin cmd /C "ls | wc"工作.
小智 5
您的参数列表必须由NULL指针终止.
char *arg[] = {"sh", "-c", "ls | wc", NULL};
Run Code Online (Sandbox Code Playgroud)