管道特點:
(1)、單向通信。數據只能由一個進程流向另一個進程(其中一個讀管道,一個寫管道);如果要進行雙工通信,需要建 立兩個管道。
(2)、管道只能用於有血緣關系的進程間通信。
(3)、流式服務。發送和接收大小不受特定格式的限制。
(4)、管道的生命周期和進程有關。
(5)、同步與互斥原則。
fcntl()可以改變已打開的文件性質
F_GETFL 取得文件描述符狀態旗標,此旗標為open()的參數flags。
F_SETFL 設置文件描述符狀態旗標,參數arg為新旗標,但只允許O_APPEND、O_NONBLOCK和O_ASYNC位的改變,其他位的改變將不受影響。
[code]#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int _pipe[2];
if(pipe(_pipe)==-1)
{
printf("pipe error\n");
return 1;
}
int ret;
int count=0;
int flag=fcntl(_pipe[1],F_GETFL);
fcntl(_pipe[1],F_SETFL,flag|O_NONBLOCK);
while(1)
{
ret=write(_pipe[1],"A",1);
if(ret==-1)
{
printf("error %s\n",strerror(errno));
break;
}
count++;
}
printf("count=%d\n",count);
return 0;
}所以管道的容量是64kb。