我想知道管道的用法是否正确,此代码在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
。我想知道我是否把它弄错了。谢谢。 最佳答案
对于管道,如果管道已满,则写入会阻塞。
请注意,写入管道的写入端的数据会在内核中进行缓冲,直到从管道的读取端读取数据为止。child :
pfd [1]可以在子级中关闭,因为未在子级中使用它。但是,如果子进程随后使用pfd [0],则不需要关闭pfd [0]。parent :
同样,可以在父级中关闭pfd [0],因为在父级中不使用它。但是,如果随后要由父级使用pfd [1],则不需要关闭它。
关于c - 如何使用管道循环,我的正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39921501/