if(errno==EAGAIN)         printf("no data avlaible\n");          printf("real read bytes %d\n",ret_size);     sleep(1);   }      pause();   unlink(FIFO_SERVER); } 
  程序应用说明: 
  把读程序编译成两个不同版本: 
  把写程序编译成两个四个版本: 
    - 非阻塞且请求写的字节数大于PIPE_BUF版本:nbwg 
 
    - 非阻塞且请求写的字节数不大于PIPE_BUF版本:版本nbw 
 
    - 阻塞且请求写的字节数大于PIPE_BUF版本:bwg 
 
    - 阻塞且请求写的字节数不大于PIPE_BUF版本:版本bw 
 
 
  下面将使用br、nbr、w代替相应程序中的阻塞读、非阻塞读 
  验证阻塞写操作: 
  1. 当请求写入的数据量大于PIPE_BUF时的非原子性: 
nbr 1000 bwg 
  2. 当请求写入的数据量不大于PIPE_BUF时的原子性: 
nbr 1000 bw 
  验证非阻塞写操作: 
  1. 当请求写入的数据量大于PIPE_BUF时的非原子性: 
nbr 1000 nbwg 
  2. 请求写入的数据量不大于PIPE_BUF时的原子性: 
nbr 1000 nbw 
  不管写打开的阻塞标志是否设置,在请求写入的字节数大于4096时,都不保证写入的原子性。但二者有本质区别: 
  对于阻塞写来说,写操作在写满FIFO的空闲区域后,会一直等待,直到写完所有数据为止,请求写入的数据最终都会写入FIFO; 
  而非阻塞写则在写满FIFO的空闲区域后,就返回(实际写入的字节数),所以有些数据最终不能够写入。 
  对于读操作的验证则比较简单,不再讨论。 
  2.5 有名管道应用实例 
  在验证了相应的读写规则后,应用实例似乎就没有必要了。 
  小结 
  管道常用于两个方面: 
		    
                       
		      
		      
		   |