- 姓名:巫艳珍
- 学号:201821121034
- 班级:计算1812
1、编写程序
在服务器上用Vim编写程序:创建一个命名管道,创建两个进程分别对管道进行读fifo_read.c
和写fifo_write.c
。(给出源代码)
(1)读fifo_read.c程序,源代码如下:
(2)写fifo_write.c程序,源代码如下:
2、分析运行结果
(1)运行结果:
(2)分析:
开两个终端,分别同时运行读和写程序。循环输入内容,通过读程序能够依次读出内容
mkfifo()函数:
int mkfifo(const char *filename,mode_t mode)
·所需的头文件为:#include <sys/types.h> #include <sys/stat.h>
·mode:
O_RDONLY:读管道
O_WRONLY:写管道
O_RDWR:读写管道
O_NONBLOCK:非阻塞
·若函数成功执行,则返回值为0,否则为-1
3、 通过该实验产生新的疑问及解答
疑问:关于管道读写的阻塞问题
解答:在open()函数中为O_NONBLOCK,表示非阻塞标志
- 对于读进程:在管道阻塞的情况下,若FIFO中没有数据,则进程将阻塞至有数据写入;在管道未阻塞的情况下,读进程会立即执行,FIFO没数据的话函数将会返回0
- 对于写进程:在管道阻塞的情况下,写操作会阻塞到数据可以被写入;在管道未阻塞但不能写入全部数据的情况下,读操作进行部分写入或者调用失败