小小的验证这管道的理论的程序
向管道中写数据时,linux将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就
会试图向管道中写入数据。 如果读进程不读走缓冲区中的数据那么写操作将会一直阻塞
#include <stdlib.h>
int main()
{
int i=0;
int fd[2]={0};
pid_t pid;
int ret=pipe(fd);
if(ret<0)
{
perror("pipe");
}
pid = fork();
if(pid<0)
{
perror("fork");
exit(-1);
}
else if(0 == pid )
{ fprintf(stdout,"child 1 \n");
sleep(5);//增加延时就是为了等待写满,再读,之后就读一个写一个
char buf[1024]={0};
for(i=0;i<30*1024;i++)//循环读取
{
ret=read(fd[1],buf,sizeof(buf));
if(ret<0)
{
perror("read");
exit(0);
}
sleep(1);
fprintf(stdout,"child %d %s\n",ret,buf);
}
}
else
{
fprintf(stdout,"parents \n");
char buf[1024*10]="hello world";
for(i=0;i<30;i++)
{
ret = write(fd[0],buf,sizeof(buf));//循环写
if(ret<0)
{
perror("write");
exit(0);
}
fprintf(stdout,"parents %d %s\n",ret,buf);
}
}
close(fd[0]);
close(fd[1]);
}