进程通讯(二)--无名管道

本文详细介绍了无名管道作为父子进程间的一种通信方式,重点阐述了其创建过程、使用方法及注意事项。通过一个实例展示了如何利用无名管道实现父进程向子进程发送数据直至结束的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 无名管道是父子进程间的通讯。无名的管道创建使用完全是在内存中。甚至连有名管道要创建的管道文件都没有。
   有名管道的管道文件虽然没有大小,但好歹磁盘中有个标记,可以被需通讯的进程们看到共同使用。而无名管道的管道完全隐藏在一个程序的代码中,在进程运行时创建销毁,正是因为这个特点,所以限制了通讯的范围。
   无名管道创建打开的函数 
   int pipe(int fd[2]);
   参数其实已经退化为指针了,之所以写2是为了明显的表示函数只需要自己定义的fd数组中的前两项。
   创建成功返回0,失败返回-1
  fd[0]控制读权限  
  fd[1]控制写权限
    read(fd[0],buff,size);
  写  write(fd[1],buff,len);
  关闭   close(fd[0])  close(fd[1])
   值得注意的是,进程通讯为了保证数据的安全完整读写,要求半双工,即父进程只写或只读,子进程对应相应的读或写,由于fork出的子进程和其父进程都拥有fd[0]和f[1],因此需要在fork后执行通讯前的第一件事是关闭其中一个权限f[0]或f[1]。
  纯文字还是不够直观,简单的举个栗子
  进程创建子进程,这俩个进程实现这样一种通讯,即父进程输入单词,子进程读单词,直到父进程输入了end,进程结束。
  


可以看到在父子进程的if else 分别对应的代码块的第一句就是先关闭了非自己应有的权限。最后才是关闭了自己本身的权限。



   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值