linux管道特点,Linux中的管道pipe----管道的四种情况和特点

Linux中的管道pipe----管道的四种情况和特点

Linux中的管道pipe----管道的四种情况和特点

管道(pipe)----是用来支持两个或多个进程间进行进程间通信(IPC)进程间通信(IPC)----每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到。所以进程之间要交换数据必须通过内核。不同进程看到的公共资源是由操作系统(OS)提供的。管道(pipe)函数原型为: int pipe(int pipefd[2]) pipefd[2]为输出型参数,是一个数组,存放打开的两个文件描述符。一般情况下,文件描述符0、1、2为标准输入输出错误,pipefd[0]打开文件描述符3,pipefd[1]打开文件描述符4。0、1下标分别对应管道的读端和写端。管道的特点:(1)管道适用于单向通信,防止用户误操作;(2)管道目前只用于具有血缘关系的进程,常用于父子进程;(3)管道的生命周期是:随进程,管道是文件,在进程退出时文件销毁,管道也销毁;(4)管道是基于字节流的通信方式;(5)管道内部已经实现了同步,具有数据一致性;下面是在Linux下的一个管道程序,我们创建一个进程,让子进程写,父进程读。父子进程同时有读端和写端,所以需要各自关闭一端。1 #include

2 #include

3 #include

4 #include

5 int main()

6 {

7 int fds[2];

8 if(pipe(fds)<0)

9 {

10 perror("pipe");

11 return 1;

12 }

13 printf("fds0:%d,fds1:%d\n",fds[0],fds[1]);

14

15 pid_t id=fork();

16 if(id==0)

17 {

18 close(fds[0]); //子进程关闭读端

19 const char* child="hello father,i am child!";

20 int i=0;

21 while(i<10) //只写入10次数据

22 {

23 sleep(1);

24 printf("child run...!,%d\n",i);

25 write(fds[1],child,strlen(child));

26 i++;

27 }

28 exit(0);

29 }

30 else

31 {

32 close(fds[1]); //父进程关闭写端

33 char buf[1024];

34 while(1)

35 {

36 ssize_t s=read(fds[0],buf,sizeof(buf)-1); //读成

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值