这样做可能/正确吗?如果我从“子”进程的fd1 [1]进行写入,那么是否可以从“父”进程的fd2 [0]中读取?
main(){
pid_t pid;
pid = fork();
if(pid <0){
return -1;
}
if(pid == 0){
int fd1[2];
int fd2[2];
pipe(fd1);
pipe(fd2);
close fd1[1];
close fd2[0];
//writes & reads between the fd1 pipes
//writes & reads between the fd2 pipes
}else{
int fd1[2];
int fd2[2];
pipe(fd1);
pipe(fd2);
close fd1[1];
close fd2[0];
//writes & reads between the fd1 pipes
//writes & reads between the fd2 pipes
}
}
答案 0 :(得分:4)
不,用于进程间通信的管道应该在 fork()
之前创建(否则,你没有简单的方法通过它们发送,因为阅读和写作结束应该是由不同的过程使用)。
在进程之间发送文件描述符作为套接字上的带外消息有肮脏的技巧,但我真的忘记了丑陋的细节
答案 1 :(得分:4)
您需要在分叉之前设置管道 。
int fds[2];
if (pipe(fds))
perror("pipe");
switch(fork()) {
case -1:
perror("fork");
break;
case 0:
if (close(fds[0])) /* Close read. */
perror("close");
/* What you write(2) to fds[1] will end up in the parent in fds[0]. */
break;
default:
if (close(fds[1])) /* Close write. */
perror("close");
/* The parent can read from fds[0]. */
break;
}