有名管道又称为fifo文件,通俗的理解:有名管道【FIFO】其实就是一个特俗的文件
fifo文件与普通文件的区别
函数学习
除了 创建/删除fifo文件两个函数,其他函数都是之前学过的。
创建有名管道 即 创建 FIFO文件,mkfifo()函数
删除管道文件unlink
实例:两个任意进程使用有名管道进行通信
代码整体逻辑:
fifo_write.c
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<fcntl.h>
#include <unistd.h>
void main()
{
int fd;
/*1 创建fifo文件*/
mkfifo("/tmp/myfifo", 0666);
/*2 打开fifo文件*/
fd = open("/tmp/myfifo", O_WRONLY);
/*3 写入数据到fifo文件 */
write(fd, "hello fifo",11);
close(fd);
}
~
fifo_read.c
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<fcntl.h>
#include <unistd.h>
void main()
{
char c_buf[15];
int fd;
fd = open("/tmp/myfifo",O_RDONLY);
read(fd, c_buf, 11);
printf("fifo read: %s\n",c_buf);
close(fd);
unlink("tmp/myfifo");//删除fifo文件
}
~
~
~
运行结果:
可以看到,运行fifo_write后,进程阻塞了,为什么那?
有名管道的一个特点:当没有其他进程 去读管道时, 写管道的进程会被阻塞
小结