gpt4 book ai didi

c++ - 为什么同样适用于 Windows 而不适用于 Unix?

转载 作者:太空狗 更新时间:2023-10-29 23:42:08 24 4
gpt4 key购买 nike

在用于创建进程的 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 中,lsgrepps 等单个命令是可执行文件,可以单独传递给 exec(即不作为 sh, bash, ... 的参数。

所以在这里,我们似乎可以再次将 "ls | wc" 作为 sh 的参数传递。 (即我们可以标记化 sh -c "ls | wc" 并将它们传递给 execvp)。但是糟糕,这行不通!

char *arg[] = {"sh", "-c", "\"ls | wc\"", NULL};
execvp(arg[0], arg);

所以问题。我该如何解决这个问题?

附言在 Windows 中,如果安装了 cygwin cmd/C "ls | wc" 有效。

最佳答案

您的参数列表必须以 NULL 指针结束。

char *arg[] = {"sh", "-c", "ls | wc", NULL};

关于c++ - 为什么同样适用于 Windows 而不适用于 Unix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5744280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com