操作系统第3次实验报告:管道

  • 姓名:林永鑫
  • 学号:201821121040
  • 班级:计算1812

1. 编写程序

在服务器上用Vim编写程序:创建一个命名管道,创建两个进程分别对管道进行读fifo_read.c和写fifo_write.c

fifo_read.c

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<sys/types.h>
  4 #include<string.h>
  5 #include<stdlib.h>
  6 #include<sys/stat.h>
  7 #include<errno.h>
  8 #include<fcntl.h>
  9 int main(){
 10     int mk = mkfifo("fifo",0777);
 11     if((mk<0)&&(errno!=EEXIST))
 12     {
 13         printf("Open fifo error!\n");
 14         exit(1);
 15     }
 16     else{
 17         printf("Open fifo success!\n");
 18     }
 19     //打开管道文件
 20     int fd = open("fifo",O_RDONLY);
 21     if(fd==-1){
 22         printf("Open fifo fail!\n");
 23         exit(1);
 24     }
 25     char readbuffer[1000];
 26     //从管道中读取
 27     while(1){
 28         int fr = read(fd,readbuffer,1000);
 29         if(fr >0 )
 30             printf("Read:%s\n",readbuffer);
 31
 32     }
 33     close(fd);
 34     exit(0);
 35 }

fifo_write.c

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<sys/types.h>
  4 #include<string.h>
  5 #include<stdlib.h>
  6 #include<sys/stat.h>
  7 #include<errno.h>
  8 #include<fcntl.h>
  9 int main(){
 10     char  readbuffer[1000];
 11     int fd = open("fifo",O_WRONLY);
 12     if(fd == -1){
 13         printf("Open fifo fail!\n");
 14         exit(1);
 15     }
 16     else{
 17         printf("Open fifo success!\n");
 18     }
 19     //从管道中读取
 20     while(1){
 21         scanf("%s",readbuffer);
 22         int fw =write(fd,readbuffer,(strlen(readbuffer)+1));
 23         printf("Write:%s\n",readbuffer);
 24     }
 25     close(fd);
 26     exit(0);

2. 分析运行结果

运行结果:

write端:

 

 read端:

 

 

 

 分析:在运行的时候要同时打开两个终端,一个终端运行fifo_write.c,另一个终端运行fifo_read.c

当两个终端都打开的时候管道就成功了,在运行fifo_write.c终端输入成功的同时运行fifo_read.c则显示输入的信息。

创建命名管道
 int mkfifo(const char *filename, mode_t mode);
mode:
 O_RDONLY:读管道
 O_WRONLY:写管道
 O_RDWR:读写管道
 O_NONBLOCK:非阻塞

3. 通过该实验产生新的疑问及解答

通过该实验如果有产生新的疑问,可以写出来,并尝试自己解决问题。

当成功运行的时候,在write端一直按回车发现程序一直运行,那么怎么停止呢?

通过网上查询,发现简单的Ctrl+c就可以结束程序的运行

参考:https://blog.csdn.net/guyue35/article/details/53419373

posted @ 2020-04-17 17:06  L1nnnnn  阅读(167)  评论(0编辑  收藏  举报