gpt4 book ai didi

c - 管道读取器看不到 EOF 或 EOS

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:13 25 4
gpt4 key购买 nike

在这个函数中,我该怎么做才能让父级停止尝试从管道读取数据。 IE。如果我运行命令 ls | grep test grep不会输出testtest.c然后等待用户输入?

pipe(pipefd);

int pid = fork();
if (pid != 0) {
dup2(pipefd[0], STDIN_FILENO);
int rv2 = execv(get_contain_dir(command_to), args_to);
close(pipefd[0]);
} else {
dup2(pipefd[1], STDOUT_FILENO);
int rv1 = execv(get_contain_dir(command_from), args_from);
close(pipefd[1]);
}

最佳答案

您没有正确关闭管道。每个进程必须关闭它不使用的管道:

int pid = fork();
if (pid != 0) {
dup2(pipefd[0], STDIN_FILENO);
close(pipefd[1]); // not using the left side
int rv2 = execv(get_contain_dir(command_to), args_to);

} else {
dup2(pipefd[1], STDOUT_FILENO);
close(pipefd[0]); // not using the right side
int rv1 = execv(get_contain_dir(command_from), args_from);
}

关于c - 管道读取器看不到 EOF 或 EOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19674818/

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