gpt4 book ai didi

c++ - fork 和执行后如何使用带选择的管道?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:36 25 4
gpt4 key购买 nike

我是 Linux 编程的菜鸟,所以请多多包涵。在我的应用程序中,我 fork(),然后 execl() 另一个二进制文件,在设置了一个用于读入的管道之后。在 fork 和 exec 正常之后,我执行 dup2() 以从已执行二进制文件的标准输出中读入。我需要我的父应用程序等待它创建的进程的输出,一旦有输出,就读取它。我想我会使用 select(),然后等待几毫秒,然后再尝试查看是否有要读取的数据,如果有,则使用 read()。但是我的代码不起作用,因为 select() 将 fd_set 作为参数,而我的管道是由 pipe() 和 dup2() 转换的 int。我该怎么做才能克服这个问题,还有其他选择吗?请注意,在进程结束之前我不会阻塞父进程,而是想在子进程运行时读取信息。

最佳答案

要使用 select(),您必须创建一个 struct fd_set 并使用 FD_ 宏填充它。通过这种方式,您将通知函数您对哪些描述符感兴趣(请注意,一次对多个描述符感兴趣是很常见的)。例如:

fd_set rfds;

FD_ZERO(&rfds);
FD_SET(your_input_fd, &rfds);

int retval = select(your_input_fd + 1, &rfds, NULL, NULL, NULL);

要选择的第一个参数是您感兴趣的编号最高的文件描述符加一。这与示例代码一起在此处进行了解释: http://linux.die.net/man/3/fd_set

关于c++ - fork 和执行后如何使用带选择的管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053194/

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