子プロセスをフォークし、子に書き込み、子から何かを読み取るのを待つ親プロセスがあると仮定すると、これを 1 つのパイプで実装できますか? 次のようになります。
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));
}
これについて詳しく学ぼうとすると、man ページには、パイプは単方向であると記載されています。これは、親と子の間で通信するパイプを作成すると、パイプに書き込むプロセスはパイプから読み取ることができなくなり、パイプから読み取るプロセスはパイプに書き込むことができなくなるということですか? これは、双方向の通信を可能にするために 2 つのパイプが必要ということですか? 何かのようなもの:
パイプ1:
P----読み取り----->C
P<---書き込み-----C
パイプ 2:
P----書き込み---->C
P<---読み取り------C