小小的验证这管道的理论的程序

 

向管道中写数据时,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]);
}