进程间通信-有名管道

有名管道:无名管道的一个扩展,无名管道是程序运行时存在,有名管道是持久的,一旦创建,所有权限进程都可以访问。

有名管道是单向通道,只能以只读或者只写方式打开。如果要实现双向通信,必须打开两个管道。

有名管道创建:os.mkfifo(path),读写和操作文件一样,open(‘path’, ‘w’),open(‘path’, ‘r’)。

有名管道示例:

Process 1

import os

P_Name = ‘./pipe‘

if(os.access(P_Name,os.F_OK) == False):

    os.mkfifo(P_Name)

print “before open rpipe”

fp_r = os.open(P_Name,os.O_RDONLY)

print “end open rpipe”

while True:

    msg = os.read(fp_r,1024)

    if msg == ‘’:

        break

    print “get msg:”,msg

    if msg == ‘q’:

        print ‘quit’

        break

os.close(fp_r)

 

Process 2

import os

P_Name = ‘./pipe’

if(os.access(P_Name,os.F_OK) == False):

    os.mkfifo(P_Name)

print “before open wpipe”

fp_w = os.open(P_Name,os.O_WRONLY)

print “end open wpipe”

msg = ‘’

while True:

    msg1 = raw_input(‘>’)

    os.write(fp_w,msg1)

    if msg1 == ‘q’:

        break

os.close(fp_w)

 

阻塞:执行设备操作时,如果不能获得资源就会挂起进程;直到获取资源后在进行操作。被挂起的进程进入休眠状态;

非阻塞:执行设备操作时,如果不能获取资源直接返回,可以使用轮训方式进行设备操作。

一个有名管道文件,如果有一个进程以只读打开,会阻塞直到有另一个进程以只写打开。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。