1. 测试发现,pipe管道容量约为4M。就是说,一直往管道写,最多写入4M,然后就会阻塞,之后读走num个字符才能再写入num个字符。
2. 管道可用于父子进程、亲缘进程通信。
#include <unistd.h>
#include <sys/types.h>
int main()
{
int pipe_fd[2];
pid_t pid;
char r_buf[4];
char* w_buf;
int writenum;
int readnum;
char buf[1024];
memset(r_buf,0,sizeof(r_buf));
if(pipe(pipe_fd)<0)
{
printf("pipe create error\n");
return -1;
}
if((pid=fork())==0)
{
while(1)
{
sleep(20);
memset(buf,0,sizeof(buf));
if((readnum=read(pipe_fd[0],buf,1023)) > 0 )
{
printf("xxxxxxxxxxx %d %s\n",readnum, buf);
}
}
}
else if(pid>0)
{
w_buf="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###";
while(1)
{
if((writenum=write(pipe_fd[1],w_buf,strlen(w_buf)+1))==-1)
printf("write to pipe error\n");
else
printf("the bytes write to pipe is %d\n", writenum);
}
}
return 0;
}