第三季-第14课-有名管道通讯编程

第14课-有名管道通讯编程

 

14.1 核心理论--有名管道

有名管道又称为FIFO文件,因此我们对有名管道的操作可以采用操作文件的方法,如使用open,read,write等。

FIFO文件在使用上和普通文件又相似之处,但是也有不同之处:

1. 读取FIFO文件的进程只能以“RDONLY”方式打开fifo文件。

2. 写FIFO文件的进程只能以“WRONLY”方式打开fifo文件。

3. FIFO文件里面的内容被读取后,就消失了。但是普通文件里面的内容读取后还是存在的。

注:在vim命令里面,在底部打入:set nu可以显示行数。

14.2 函数学习

1. 创建有名管道

(1) 函数名

mkfifo

(2) 函数原形

int mkfifo(const char *pathname, mode_t mode);

(3) 函数功能

创建FIFO文件(有名管道)。

(4) 所属头文件

#include<sys/types.h>

#include<sys/stat.h>

(5) 返回值

成功:0

失败:-1

(6) 参数说明

pathname:我们创建的fifo文件的名字(包含路径)。

mode:fifo文件的访问权限

2. 删除有名管道

(1) 函数名

unlink

(4) 函数原形

int unlink(const char *pathname);

(5) 函数功能

删除FIFO文件(有名管道)以及普通文件。

(4) 所属头文件

#include<unistd.h>

(5) 返回值

成功:0

失败:-1

(6) 参数说明

pathname:我们要删除的文件的名字(包含路径)。

14.3 综合实例编程

任意两个进程利用有名管道通讯。

创建写进程程序:

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdio.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);

/*4.关闭fifo*/

close(fd);

}

 

创建读进程程序:

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdio.h>

void main()

{

int fd;

char c_buf[15];

/*1.打开fifo文件*/

fd = open("/tmp/myfifo",O_RDONLY);

/*2.读fifo文件数据*/

read(fd,c_buf,11);

printf("read is %s ",c_buf);

close(fd);

unlink("/tmp/myfifo");

}                                                                            

 运行结果:当运行./fifo_write时,程序会处于阻塞状态。直达我们在另一个窗口运行./fifo_read时,阻塞状态才会解除,并且打印:read is hello fifo 

原文地址:https://www.cnblogs.com/free-1122/p/11346198.html