操作系统第三次实验报告:管道
- 姓名 张波
- 学号 201821121027
- 班级 计算1911
1. 编写程序
在服务器上用Vim编写程序:创建一个命名管道,创建两个进程分别对管道进行读fifi_read.c
和写fifo_write.c
。给出源代码。
fifi_read.c(打错fifo成fifi将就)
fifo_write.c
2. 分析运行结果
写端fifo_write.c
读端fifi_read.c
分析:在运行时需同时开启两个终端,并且先运行read程序,如果先运行write程序会显示Fail to open,只有两端同时运行才能建立连接。
3. 通过该实验产生新的疑问及解答
命名管道创建完成后就可以使用,其使用方法与管道一样;
区别在于:
(1)命名管道使用之前需要使用open()打开。这是因为:命名管道是设备文件,它是存储在硬盘上的,而管道是存在内存中的特殊文件。
(2)但是需要注意的是,命名管道调用open()打开有可能会阻塞,但是如果以读写方式(O_RDWR)打开则一定不会阻塞;
(3)命名管道以只读(O_RDONLY)方式打开时,调用open()的函数会被阻塞直到有数据可读;
(4)命名管道如果以只写方式(O_WRONLY)打开时同样也会被阻塞,知道有以读方式打开该管道。
区别在于:
(1)命名管道使用之前需要使用open()打开。这是因为:命名管道是设备文件,它是存储在硬盘上的,而管道是存在内存中的特殊文件。
(2)但是需要注意的是,命名管道调用open()打开有可能会阻塞,但是如果以读写方式(O_RDWR)打开则一定不会阻塞;
(3)命名管道以只读(O_RDONLY)方式打开时,调用open()的函数会被阻塞直到有数据可读;
(4)命名管道如果以只写方式(O_WRONLY)打开时同样也会被阻塞,知道有以读方式打开该管道。