在windows API创建过程中我们有CreateProcess
函数。为什么同样的作品在windows上并不适用于unix?
现在让我们考虑我们想要创建进程并运行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);
所以问题。我该如何解决这个问题?
P.S. 在Windows中如果安装了cygwin cmd /C "ls | wc"
的作品。
避免编辑您的问题,使现有的答案是这样的错误。事实之后,它会造成一个令人困惑的阅读。当然,不要编辑现有的答案来匹配修改后的问题。 – 2011-04-21 14:05:51