进程间通信-无名管道

管道:是一种半双工的通信机制,它一端用来读,另外一端用来写;管道只能用来在具有公共祖先的两个进程之间通信(父进程和子进程或者同一父进程的两个子进程);管道通信消息遵循先进先出的原理,并且数据只能被读取一次,当此段数据被读取后就会清空。管道实质是内存页(page)。

相关函数:os.pipe();它返回读写通道文件描述符组成的元组(read_end,write_end)。

无名管道示例:

import os

pi = os.pipe()  #创建管道:(fd_read,fd_write)

pid = os.fork()

if (pid == 0):  #子进程继承父进程的资源,给父进程发送消息。

    os.write(pi[1], “hello world”)

else:

    msg = os.read(pi[0], 1024)  #父进程读取子进程发送消息。

    print msg

子进程只负责读取,父进程只负责写:

import os

p = os.pipe()

pid = os.fork()

if(pid == 0):

    os.close(p[1])

    while True:

        msg = os.read(p[0],1024)

        print msg

        if(msg == “q”):

            break

else:

    os.close(p[0])

    while True:

        str1 = raw_input()

        os.write(p[1],str1)

        if(str1 == ‘q’):

            os.wait()

            os.close(p[1])

            break

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