我 fork 并设置了一个类似于这样的命令:
pid_t pid;
pid = fork();
if (pid == 0)
{ // I am the child
freopen("/input_pipe","r",stdin);
freopen("/output_pip","w",stdout);
execl("/bin/sh", "sh", "-c", command, (char *)NULL); // using execv is probably faster
// Should never get here
perror("execl");
exit(1);
}
在进程分叉之前,/input_pipe已经被创建并填充了数据。这在几乎所有情况下都可以正常工作。该命令从stdin中读取(使用
read()
)并获取另一个进程写入管道的数据。但有时候该命令无法从stdin流中读取数据,并在尝试这样做时出现“坏文件描述符”错误。可能会导致这种错误的原因是什么?编辑:我已将freopen部分更改为以下内容: pipe_in = open(pipename_in, O_RDONLY);
pipe_out = open(pipename_out, O_WRONLY);
dup2(pipe_in, 0);
dup2(pipe_out, 1);
尽管这个错误只出现得很少,但我会测试几天来确认。