zoukankan      html  css  js  c++  java
  • 操作系统第3次实验报告:管道

    • 林伟强
    • 201821121010
    • 计算1811

    1. 编写程序

    fifo_read.c

      1 #include<stdio.h>
      2 #include <sys/stat.h>
      3 #include <sys/types.h>
      4 #include <stdlib.h>
      5 #include <fcntl.h>
      6 #include <unistd.h>
      7 int main(){
      8         unlink("FIFO");
      9             if(mkfifo("FIFO",0777)<0){            //创建
     10          printf("error!
    ");
     11          return -1;
     12                  }
     13         int flag=open("FIFO",O_RDONLY);                   //只读
     14         char a[200];
     15         while(1){
     16
     17             printf("等待输入
    ");
     18             ssize_t size=read(flag,a,sizeof(a)-1);    //读取
     19             if(size<0){
     20                 printf("error
    ");
     21                 break;
     22
     23         }
     24         else if(size>0){                                                                                             
    25 a[size]=0;
    26 printf("%s ",a);
    27 }
    28 else{ 29 printf("Exit!"); 30 break;} 31 } 32 close(flag); 33 return 0; 34 } 35
    fifo.write.c  
    2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <sys/stat.h> 6 #include <sys/types.h> 7 #include <fcntl.h> 8 #include <unistd.h> 9 #include"memory.h" 10 int main(){ 11 int flag=open("FIFO",O_WRONLY); //阻塞方式 12 while(1){ 13 char a[200]; 14 printf("write something:"); 15 fflush(stdout); 16 size_t size=read(0,a,sizeof(a)); 17 if(size<=0){ 18 printf("read error! "); 19 break; 20 } 21 else { 22 a[size]=0; 23 write(flag,a,strlen(a)); 24 } 25 } 26 close(flag); 27 return 0; 28 }

      

    2. 分析运行结果

     

    实验注意先开启read文件,因为在只读进程中创建了"FIFO"管道,并且在前面定义堵塞方式,

    在write文件进入一个输入死循环,可以进行一直的写内容进管道,之后写入管道通过write函数,转

    到read进程中先将开头文字打印出来并且让程序在read函数那里等待,读取有用信息后读取存在a内并且输出,注意判断a的长度,

    在运行结果中机会卡在等待输入,只有在write进程中写入后才输出 

    open("FIFO",O_WRONLY);   FIFO管道名       O_WRONLY 只写堵塞,我认为的是遇到write函数才会停下等待输入,同理read也是这样

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

    退出时read进入了无限循环

  • 相关阅读:
    CSS3 定位| Position研究
    ASP.NET中Partial Class部分类
    如何安全实现“记住我”的功能
    JavaScript后台代码操作HTML TABLE的方法
    强悍的CSS工具组合:Blueprint, Sass, Compass
    CSS的力量:用一个DIV画图
    ASP.NET记录错误日志的方式
    ASP.NET私有构造函数作用
    c#.net实现浏览器端大文件分块上传
    asp.net实现浏览器端大文件分块上传
  • 原文地址:https://www.cnblogs.com/hxrlwq13/p/12709738.html
Copyright © 2011-2022 走看看