进程间通信-有名管道
有名管道:无名管道的一个扩展,无名管道是程序运行时存在,有名管道是持久的,一旦创建,所有权限进程都可以访问。
有名管道是单向通道,只能以只读或者只写方式打开。如果要实现双向通信,必须打开两个管道。
有名管道创建: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)
阻塞:执行设备操作时,如果不能获得资源就会挂起进程;直到获取资源后在进行操作。被挂起的进程进入休眠状态;
非阻塞:执行设备操作时,如果不能获取资源直接返回,可以使用轮训方式进行设备操作。
一个有名管道文件,如果有一个进程以只读打开,会阻塞直到有另一个进程以只写打开。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。