先贴代码
写进程
//fifo_w.c
#include
#include
#include
#include
#include
#include
#include
int main()
{
if(access("myfifo",F_OK))
{
mkfifo("myfifo",0777);
}
int fd = open("myfifo",O_WRONLY);
char buf[1024];
sprintf(buf,"helloworld!!!\n");
write(fd,buf,strlen(buf));
close(fd);
return 0;
}
读进程
//fifo_r.c
#include
#include
#include
#include
#include
#include
#include
int main()
{
if(access("myfifo",F_OK))
{
mkfifo("myfifo",0777);
}
int fd = open("myfifo",O_RDONLY);
char buf[1024];
int len = read(fd,buf,sizeof(buf));
close(fd);
write(STDOUT_FILENO,buf,strlen(buf));
return 0;
}
FIFO命名管道通信,也是利用内核中的队列实现的进程间通信的一种技术,fifo于pipe区别在于fifo可以在没有血缘关系的进程间通信,通信借助FIFO文件在不同进程间实现通信,FIFO文件本身不存储内容,只是充当一个节点,实际还是用来映射到内核中的队列来实现通信
注意,读端程序关闭时候,写端程序也将推出。读短程序停止读时,写端写满队列后将阻塞。