Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291370
  • 博文数量: 111
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 816
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-04 20:35
文章分类

全部博文(111)

文章存档

2016年(1)

2015年(5)

2014年(105)

我的朋友

分类: C/C++

2014-06-29 21:48:29

1. 函数说明

pipe(建立管道):

1) 头文件 #include

2) 定义函数: int pipe(int filedes[2]);

3) 函数说明: pipe()会建立管道,并将文件描述词由参数filedes数组返回。

filedes[0]为管道里的读取端

filedes[1]则为管道的写入端。

4) 返回值:  若成功则返回零,否则返回-1,错误原因存于errno中。

错误代码:

EMFILE 进程已用完文件描述词最大量

ENFILE 系统已无文件描述词可用。

EFAULT 参数 filedes 数组地址不合法。

示例:

桌面/c++# cat -n pipe_test.cpp
    1
    2 #include
    3 #include
    4 #include
    5 #include
    6 #include
    7 #include
    8 #include
    9 /*
    10  * 程序入口
    11  * */
    12 int main()
    13 {
    14  int pipe_fd[2];
    15  pid_t pid;
    16  char buf_r[100];
    17  char* p_wbuf;
    18  int r_num;
    19 
    20  memset(buf_r,0,sizeof(buf_r));
    21 
    22  /*创建管道*/
    23  if(pipe(pipe_fd)<0)
    24  {
    25   printf("pipe create error\n");
    26   return -1;
    27  }
    28 
    29  /*创建子进程*/
    30  if((pid=fork())==0)  //子进程执行序列
    31  {
    32   printf("\n");
    33   close(pipe_fd[1]);//子进程先关闭了管道的写端
    34   sleep(2); /*让父进程先运行,这样父进程先写子进程才有内容读*/
    35   if((r_num=read(pipe_fd[0],buf_r,100))>0)
    36   {
    37    printf("%d numbers read from the pipe is %s\n",r_num,buf_r);
    38   }
    39   close(pipe_fd[0]);
    40   exit(0);
    41   }
    42  else if(pid>0) //父进程执行序列
    43  {
    44   close(pipe_fd[0]); //父进程先关闭了管道的读端
    45   if(write(pipe_fd[1],"Hello",5)!=-1)
    46    printf("parent write1 Hello!\n");
    47   if(write(pipe_fd[1]," Pipe",5)!=-1)
    48    printf("parent write2 Pipe!\n");
    49   close(pipe_fd[1]);
    50   wait(NULL); /*等待子进程结束*/
    51   exit(0);
    52  }
    53  return 0;
    54 }
    55
    56
桌面/c++# g++ pipe_test.cpp -o pipe_test
桌面/c++# ./pipe_test
parent write1 Hello!
parent write2 Pipe!

10 numbers read from the pipe is Hello Pipe
桌面/c++#


本篇文章来源于 Linux公社网站()  原文链接:

阅读(5612) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~