有名管道FIFO
无名管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。
FIFO文件的读写流程:读read 写write 打开open 关闭close
写进程:
1.创建fifo文件
2.向fifo中写入数据
3.退出函数
读进程
1.读取fifo中的数据
2.显示数据
FIFO写文件:
#include
#include
#include
#include
void main()
{
int fd;
/* make fifo */
mkfifo("/tmp/myfifo",0666);
/* open fifo*/
fd=open("/tmp/myfifo",O_WRONLY);
/* write to fifo*/
write(fd,"hello fifo",11);
close (fd);
}
FIFO读文件:
#include
#include
#include
void main()
{
char c_buf[15];
int fd;
fd=open("/tmp/myfifo",O_RDONLY);
read(fd,c_buf,11);
printf("read %s\n",c_buf);
close(fd);
unlink("/tmp/myfifo");
}
在一个终端中执行fifo写文件,当执行时fifo写文件会阻塞,等待fifo读文件读出数据,在另一个终端中执行fifo读文件。就可以读出read hello fifo
阅读(1081) | 评论(0) | 转发(0) |