假设我有一个父进程分叉一个子进程,写入子进程,然后等待从子进程读取某些内容,我可以用一个管道实现这个吗?它看起来像:
int main(){
pid_t pid1;
int pipefd[2];
char data[]="some data";
char rec[20];
if(pipe(pipefd) == -1){
printf("Failed to pipe\n");
exit(0);
}
pid1 = fork();
if(pid1<0){
printf("Fork failed\n");
exit(0);
}else if(pid1==0){
close(pipefd[1]);
read(pipefd[0],rec,sizeof(rec));
close(pipefd[0]);
//do some work and then write back to pipe
write(pipefd[1],data,sizeof(data));
}else{
close(pipefd[0]);
write(pipefd[1],data,sizeof(data));
close(pipefd[1]);
//ignoring using select() for the moment.
read(pipedfd[0],rec,sizeof(rec));
}
在尝试了解更多信息时,手册页指出管道是单向的。这是否意味着当您创建管道以在父子之间进行通信时,写入管道的进程不能再读取它,而从管道读取的进程也不能再写入它?这是否意味着您需要两个管道来允许来回通信?就像是:
管道1:
P----阅读----->C
P<---写-----C
管道2:
P----写---->C
P<---读-----C