FIFO解决了在进程通信的时候产生大量临时文件的问题,并且可以实现非血缘关系进程间的通信,而且可以保留给后来的进程使用。
FIFO的读写规则和匿名管道的读写规则相似,不过
FIFO保存在磁盘上,而匿名管道保存在内存里。
当FIFO的写进程关闭的时候,会向FIFO的读进程发送一个文件结束符。
客户端:
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<string.h>
int main()
{
char* msg = "Hello, i am client!\n";
int fd = open("./fifo1",O_WRONLY);
int i = 0;
for(;i<10;i++)
{
printf(msg);
if(write(fd,msg,strlen(msg)+1)<0)
{
_exit(-1);
}
sleep(2);
}
close(fd);
return 0;
}
服务器端:
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<string.h>
int main()
{
int fd = open("./fifo1",O_RDONLY);
int i = 0;
char buf[24]={0};
while(read(fd,buf,24)>0)
{
printf(buf);
}
close(fd);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/d5f7bde2fbe7d5cc60cd598d56fd310d.png)