我是靠谱客的博主 诚心秀发,最近开发中收集的这篇文章主要介绍Linux如何运行pipe1,Linux C++管道之pipe,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 errorn");

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 %sn",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公社网站()  原文链接:

最后

以上就是诚心秀发为你收集整理的Linux如何运行pipe1,Linux C++管道之pipe的全部内容,希望文章能够帮你解决Linux如何运行pipe1,Linux C++管道之pipe所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部