• 电脑知识
  • 电脑入门
  • 电脑技巧
  • 网络知识
  • 操作系统
  • 工具软件
  • 电脑安全
  • 硬件知识
  • 当前位置: 天一资源网 > 实验 正文

    【unix实验报告实验七 管道pipe和popen通信】

    时间:2020-08-09 12:38:17 来源:天一资源网 本文已影响 天一资源网手机站

      实验七 管道pipe和popen通信

     实验目的1. 掌握无名管道pipe的原理

     2. 掌握管道的应用及重定向。

     3. 熟悉popen创建管道的方式及应用程序设计;

     实验内容

     1. (1) 在命令行下执行ls –l |grep .c命令,查看运行结果。

     (2)设计一个程序,要求创建一个管道PIPE,复制进程,父进程运行命令“ls -l”,把运行结果写入管道,子进程从管道中读取“ls -l”的结果,把读出的作为输入运行“grep .c”。即实现“ ls –l |grep .c”功能。参考课件ch4 P52,54。

     程序源代码:

     #include <stdio.h>

     #include<signal.h>

     #include<unistd.h>

     #include<stdlib.h>

     int main () {

      int fd[2];

      char buf[1000];

      pid_t p;

      if(pipe(fd)<0)

      {

     printf("创建管道失败");

      return -1; }

      p=fork();

      if(p<0)

      { perror("创建子进程失败");

      exit;}

      else if (p==0){

      close(0);

      dup(fd[0]);

      execlp("grep","grep",".c",NULL);

      }

      else{

      close(1);

      dup(fd[1]);

      execlp("ls","ls","-l",NULL);

      wait(0);

     }

      return 0; }

     结果截图:

     2. (1)在命令行下执行 $touch file.txt $ls –l >file.txt, cat命令查看file.txt内容。

     (2)设计一个程序,要求利用popen函数,实现“ls –l > file.txt”的重定向功能,file.txt在程序中创建。参考课件ch4 59

     程序源代码:

     #include <stdio.h>

     #include<signal.h>

     #include<unistd.h>

     #include<stdlib.h>

     int main ()

     { FILE *fp; int num; char buf[500];

      memset(buf,0,sizeof(buf));

      printf("建立管道……\n");

      fp=popen("ls -l","r");

      if(fp!=NULL)

      { num=fread(buf,sizeof(char),500,fp);

      if(num>0)

      { printf("%s\n",buf); }

      pclose(fp); }

      else

      { printf("用popen创建管道错误\n");

      return 1; }

      fp=fopen("a.txt","w+");

      fwrite(buf,sizeof(char),500,fp);

      pclose(fp);

      return 0;

     }

     运行结果截图:

    相关关键词: 操作系统文件管理实验 新晃思源实验学校:誓师大会,备战中考 新晃思源实验学校图片 新晃思源实验学校简介 “国培计划(2017)”英语科送教活动在白水县田家炳实验中学进行
    相关热词搜索: 实验 管道 通信 报告 unix

    • 范文大全
    • 教案下载
    • 优秀作文
    • 励志
    • 课件
    • 散文
    • 名人名言