在linux的无名管道通信中,两个进程进行读写一次后,到第二次开始,读写总是失败,这是什么原因。 (无名管道 linux)
1) 出错的时候用perror把错误号打出来;
2)使用管道要注意一点:如果管道的读悉扒出端关闭,但是还有进程尝试向管道写入的话,试图写入的进程将收到一个SIGPIPE信号 ,睁清昌会导致进程正枣退出。
#include
#include
#include
#include
#include
#include
#define MAX_DATA_LEN 256
#define DELAY_TIME 1
int main(void)
{
pid_t pid;
int pfd;
char buf;
const char data = “Pipe Message”;
int real_read,real_write;
int time = 10;
memset((void *)buf,0,sizeof(buf));
if(pipe(pfd) == -1)
{
perror(“pipe”);
exit(1);
}
if((pid = fork()) == -1)
{
perror(“fork”);
exit(1);
}else if(pid == 0)
{
close(pfd);
sleep(DELAY_TIME);
while(time–)
{
sleep(1);
if((real_read = read(pfd,buf,MAX_DATA_LEN)) > 0)
{
printf(“%d bytes read from the pipe is %s\n”,real_read,buf);
}
}
close(pfd);
exit(0);
}else
{
close(pfd);
sleep(DELAY_TIME);
while(time–)
{
sleep(1);
if((real_write = write(pfd,data,strlen(data))) > 0)
{
printf(“parent wrote %d bytes:%s\n”,real_write,data);
}
}
close(pfd);
waitpid(pid,NULL,0);
exit(0);
}
}
你也没贴出什圆睁么错误,给缺腔核你个示例,你自己研究下, 这个是伏掘可以运行的,反复读写管道。。