进程间通信之有名管道

      相对于无名管道而言,有名管道当然是有名字的,这样就可以使任何进程通过文件名或路径名与该管道挂钩。所以,有名管道可用于任意两进程之间的通信。

       就有名管道和无名管道的实现来说,主要是在打开方式上有所不同,管道文件一旦打开(建立),以后两者对管道文件的读、写和关闭操作相同。

int open (const char *path, int flags);

那么,下面就来说一说有名管道的打开方式:

  1. 以 O_RDONLY 方式打开

          1) 如果管道的写端已经打开,则唤醒写端进程,完成有名管道的建立,然后,读端进程和写端进程返回各自用户空间;

          2) 管道的写端尚未打开

                (a) 标志位 O_NONBLOCK 为1,不加等待,立即返回;

                (b) 标志位 O_NONBLOCK 为 0,读端进程进入睡眠,等待写端进程打开写端以完成有名管到的建立。

     2. 以 O_WRONLY 方式打开

           1) 管道的读端已经打开,若当前进程是第一次打开该有名管到写端的进程,就要负责唤醒在睡眠中等待的读端进程;

           2) 读端尚未打开

                  (a) 标志位 O_NONBLOCK 为 1,写端打开失败,释放已经分配的各种资源,返回;

                  (b) 标志位 O_NONBLOCK 为 0,写端进程进入睡眠,等待某个进程打开读端才能返回。

     3. 以 O_RDWR 方式打开

        相当于有同一进程打开了有名管道的两端,所以不需要等待,只需唤醒某个打开了写端或读端而正在睡眠中等待的进程。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值