码迷,mamicode.com
首页 > 系统相关 > 详细

进程间通信-有名管道

时间:2015-05-22 22:27:55      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:

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

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

有名管道创建: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)

 

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

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

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

进程间通信-有名管道

标签:

原文地址:http://www.cnblogs.com/pylab/p/4523297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!