2008-11-12

Linux下由两个管道提供双向数据流的C程序

Posted in FreeBSD/Unix服务器 at 12:44 Author:仲远

标签:

以下是一个Linux/Unix下由两个管道提供双向数据流的C程序,这是操作系统课程中经常使用的基本程序:

  1. #include <unistd.h>
  2. #include <sys/types.h>
  3. #include <sys/wait.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. int main()
  7. {
  8.     int fd1[2],fd2[2],cld_pid,status;
  9.     char buf[200], len;
  10.  
  11.     if (pipe(fd1) == -1) // 创建管道1
  12.     {
  13.         printf("creat pipe1 error\n");
  14.         exit(1);
  15.     }
  16.     if (pipe(fd2) == -1) // 创建管道2
  17.     {
  18.         printf("creat pipe2 error\n");
  19.         exit(1);
  20.     }
  21.  
  22.     if ((cld_pid=fork()) == 0) //子进程
  23.     { 
  24.         close(fd1[1]); // 子进程关闭管道1的写入端
  25.         close(fd2[0]); // 子进程关闭管道1的读出端
  26.        
  27.         //子进程读管道1
  28.         len = read(fd1[0],buf,sizeof(buf));
  29.         printf("\n这是在子进程:子进程从管道1中读出的字符串 -- %s",buf);
  30.  
  31.         //子进程写管道2
  32.         strcpy(buf,"子进程写入管道2的字符串");
  33.         write(fd2[1],buf,strlen(buf));
  34.         printf("\n这是在子进程:子进程成功写入如下语句:%s\n",buf);
  35.  
  36.         exit(0);
  37.     }
  38.     else //父进程
  39.     { 
  40.         close(fd1[0]); // 父进程关闭管道1的读出端
  41.         close(fd2[1]); // 父进程关闭管道2的写入端
  42.        
  43.         //父进程写管道1
  44.         strcpy(buf,"父进程写入管道1的字符串");
  45.         write(fd1[1],buf, strlen(buf));
  46.         printf("miaojing\n");
  47.        
  48.         //父进程读管道2
  49.         len = read(fd2[0],buf,sizeof(buf));
  50.         printf("\n这是在父进程:父进程从管道2中读出的字符串 -- %s\n",buf);
  51.         exit(0);
  52.     }
  53. }

本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:

1 Comment »

  1. Spirit said,

    2008年November12日 at 14:04

    Steven的Unix高级编程里这些基本程序都可以找到,是很好的工具书~

Leave a Comment

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word