gpt4 book ai didi

c - 为什么 execlp 不允许我使用管道?

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:44 24 4
gpt4 key购买 nike

#include <stdio.h>
#include <unistd.h>
main()
{
execlp("ls" , "ls", "-l", "|" , "sort", NULL);
}

怎么了?请帮忙。

如果我这样写:execlp("ls", "ls", "-l", NULL); 然后结果显示在屏幕上,如果我尝试这个 execlp("ls", "ls", "-l", "|", "sort", NULL); 屏幕显示错误消息无法访问

为什么?有人有什么主意吗?为什么在执行命令 execlp 时不允许我使用管道 (|)?

最佳答案

当你在 shell 中编写以下命令时

ls -l | sort

执行了两个程序:lssort

管道字符 (|) 表示第一个的输出应该重定向到第二个的标准输入。该管道由您的 shell 解释。它不是您命令的参数。

execlp将程序的名称及其参数作为参数。

所以当你写的时候

execlp("ls" , "ls", "-l", "|" , "sort", NULL);

它没有任何意义,因为 |sort 不是 ls 的参数。

你想要的是做 shell 为你做的事情:

  1. 声明pipe
  2. 创建一个分支,将标准输出重定向到管道(使用 dup )并执行 ls:

    execlp("ls" , "ls", "-l", NULL);
  3. 创建一个分支,将管道重定向到标准输入并执行 sort:

    execlp("sort" , "sort", NULL);
  4. 关闭管道,等待等

关于c - 为什么 execlp 不允许我使用管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383981/

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