首先,先看下这段代码
int main(){
int mk;
if((mkfifo("./file1",0600)==-1)&&errno!=EEXIST){
printf("creat fifo error\n");
perror("why?");
}
int gate=open("./file1",O_读);
printf("open success!\n");
return 0;
}
~
运行一下
CLC@Embed_Learn:~/ccc$ ./a.out
printf() 显示不出来 是因为 管道被堵了
解决方法代码如下
int main(){
int mk;
if((mkfifo("./file1",0600)==-1)&&errno!=EEXIST){
printf("creat fifo error\n");
perror("why?");
}
int gate=open("./file1",O_RDONLY);//read
printf("open read success!\n");
return 0;
}
另一个程序以写的打开FIFO
int main(){
int gate=open("./file1",O_WRONLY);//write
printf("open write success!\n");
return 0;
}
以下为思路
这边read.c中首先创建一个命名管道名字为file,以文件的形式存在,其他程序打开以后,read才运行,接着打开这个管道,读取里面的东西。
那怎么来使用fifo呢?
往里面写
正常的读与写
write.c中打开这个管道,向里面写入“gao ying jie hen shuai ”这句话,写入之后read.c立即获取到这句话,把它读取出来,
这就实现了两个没有亲缘关系的进程间的通信。(这就是命名管道的好处)