一、普通管道创建
普通管道创建 失败则显示 creat pipe failed
int fd[2];
int pid;
char buf[128];
if(pipe(fd) ==-1)
{
printf("creat pipe failed\n"); //创建管道失败
}
然后创建进程
pid = fork(); //创建进程
if(pid<0)
{
printf("creat child failed\n");
}
else if( pid >0){
sleep(1);
printf("this is father\n");
close(fd[0]);
write(fd[1],"hello word",20);
wait(0);
}else{
printf("this is child\n");
close(fd[1]);
read(fd[0],buf,128);
printf("read form father :%s\n",buf);
exit(0);
}
父进程 关闭读的功能 ,只往管道里面写数据 子进程关闭写的功能 ,只从管道里面读数据
程序运行结果 先是父进程 往里面写数据,然后是子进程 从buf里面读数据
二、管道命名
FIFO 管道命名是一种文件类型,有路径名与之关联,以一种特殊设备文件形式存在于文件系统中
mkfifo("./file",0600);
创建一个file文件。
创建FIFO管道 如果只读打开文件会阻塞 必须等到其他进程写而打开FIFO创建的文件才会继续运行
这是 只读打开文件 单独运行无法打开
char buf[24]={0};
if(mkfifo("./file",0600)== -1&& errno !=EEXIST){
printf("mkfifo failed\n");
perror("why");
}
int fd=open("./file",O_RDONLY); //只读open会阻塞 直到其他进程写而打开此FIFO 才会执行
printf("open sucess\n");
int nread = read(fd,buf,24);
printf("read %d byte form fifo,context:%s\n",nread,buf);
close(fd);
return 0;
必须等到写而打开次此文件程序运行后才会运行
char *str ="hello word";
int fd=open("./file",O_WRONLY); //此进程是为了打开文件而创建的
printf("write sucess\n");
write(fd,str,strlen(str));
close(fd);
先运行读文件 没有反应
在运行写文件
再次观察读文件
此次运行成功。