父进程在将stdout更改为W-pipeside后执行hello.exe(将“Hello!\ n”打印到stdout)。
子进程接受此(stdin已更改为R-pipeside)并将输出重定向到out.txt文件。我在这里遵循了指南和许多类似的问题,并没有看到代码有任何问题。
问题是out.txt文件已创建,但它是空的。什么都没写。
int main (void)
{
pid_t child;
int Pipe[2];
(void) pipe(Pipe);
child = fork();
if (child == 0)
{
//Redirecting Child's STDIN to Pipe's read.
(void) close(0);
(void) dup(Pipe[0]);
(void) close(Pipe[0]);
(void) close(Pipe[1]);
//Redirecting Child's STDOUT to out.txt file.
int file = open("out.txt", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
(void) close(1);
(void) dup(file);
(void) close(file);
}
else
{
//parent process
(void) close(1);
(void) dup(Pipe[1]);
(void) close(Pipe[0]);
(void) close(Pipe[1]);
(void) execl("hello.exe", "hello.exe", (char*)NULL);
perror("execl");
}
return 0;
}
答案 0 :(得分:0)
您能否提供有关如何正确阅读和阅读的更多信息 写在子进程中?
如果我复制我的钥匙给你,那是否意味着门会在那时神奇地打开?当然不是。复制密钥后,您仍需要对其执行某些操作。同样在这里。复制文件描述符不会神奇地导致数据被读取或写入。您仍然需要调用写入或读取这些文件描述符的函数。在这种情况下,调用任何标准函数从stdin读取(例如scanf
,fgets(.., stdin)
等)并写入stdout
(例如printf
,write(STDOUT_FILENO, ..)
,等等)。通过调用孩子中的那些功能来试一试。
- kaylum