1. 无名管道的缓存是由大小的,缓存满了,会出现写阻塞。
2. 实例1,计算缓存大小:
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main()
{
int fd[2];
int ret;
int i=0;
char writebuf[]="hello linux";
char readbuf[128]={0};
ret=pipe(fd);
if(ret <0)
{
printf("creat pipe failure\n");
return -1;
}
printf("creat pipe sucess fd[0]=%d,fd[1]=%d\n",fd[0],fd[1]);
while( i < 5456)
{
write(fd[1],writebuf,sizeof(writebuf));
i++;
}
printf("write pipe end\n");
close(fd[0]);
close(fd[1]);
return 0;
}
执行结果:
alex@alex-virtual-machine:/extra/process/003$ gcc pipe_4.c
alex@alex-virtual-machine:/extra/process/003$ ./a.out
creat pipe sucess fd[0]=3,fd[1]=4
write pipe end
3.实例2:
通过无名管道,父进程先执行,子进程后执行。
先pipe再fork,子进程继承父进程的文件描述符,所以可以父子进程间通信。