//生产者模式
#include"apue.h"
#include<fcntl.h>
#include<string.h>
#define FIFO_NAME "./fifo"
int main()
{
int res;
int fd;
char data[MAXLINE]="hello world";
char recv[MAXLINE];
int n;
if((res=mkfifo(FIFO_NAME,0777))<0)
err_sys("mkfifo error");
if((fd=open(FIFO_NAME,O_WRONLY))<0)
err_sys("open error");
while((n=read(STDIN_FILENO,data,MAXLINE))>0){
if(write(fd,data,n)!=n)
err_sys("write error");
}
exit(0);
}
//消费者模式
#include"apue.h"
#include<fcntl.h>
#define FIFO_NAME "./fifo"
int main()
{
int fd;
char data[MAXLINE];
int n;
if((fd=open(FIFO_NAME,O_RDONLY))<0)
err_sys("open error");
if((n=read(fd,data,MAXLINE))>0){
if(write(STDOUT_FILENO,data,n)!=n)
err_sys("write error");
}
exit(0);
}
注意:FIFO可以以O_RDWR方式打开,这时可以读自己写入的数据;进程终止时,FIFO还是会存在文件系统中,但是数据已被删除,需要使用unlink函数显式删除FIFO