我想知道我对管道的使用是否正确,这段代码位于fork()子进程中,pfd是管道指针:
char buf[1024];
while(1){
signal(SIGUSR1, OnSigUsr1);
sleep(10000);
if(get==1){
get=0;
close(pfd[1]);
read(pfd[0], buf, sizeof(buf));
close(pfd[0]);
}
}
父代码中的另一段代码:
char buffer[1024];
/*put something in buffer*/
close(pfd[0]);
if(write(pfd[1], buffer, strlen(buffer))==-1){
printf("error write\n");
};
close(pfd[1]);
kill(fpid,SIGUSR1);
我的问题是缓冲区只能从 fork() 写入和获取一次,下次不能再次写入管道并返回 error write
。我想知道是不是我哪里做错了。谢谢。
最佳答案
您只能将数据写入打开的文件描述符。父级在写入缓冲区后执行 close(pfd[1]);
,子级在读取缓冲区后执行 close(pfd[0]);
。如果您将再次使用文件描述符,请不要关闭它,而是在程序退出之前关闭所有打开的文件描述符。
关于c - 如何在循环中使用管道,我的正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921501/