4) 进程的管道通信:编制一段程序,实现进程的管道通信
时间: 2024-10-11 22:16:24 浏览: 3
在计算机编程中,尤其是操作系统层面,进程间的管道通信(Process Communication via Pipes)是一种机制,它允许一个进程将数据发送到另一个正在运行的进程。这种通信方式利用内核提供的管道(pipe)结构,在两个相关的进程间创建一个半双工的、无名的、字节流式的通信通道。
以下是一个简单的Python示例,展示了如何使用os模块来实现进程间的管道通信:
```python
import os
# 父进程
def parent():
# 创建管道
pipe = os.pipe()
# 写入数据
message = "Hello from Parent"
os.write(pipe[1], message.encode()) # 使用第二个文件描述符(右端)写入数据
# 关闭写端
os.close(pipe[1])
# 接收并打印数据
received_message = os.read(pipe[0], 1024).decode() # 使用第一个文件描述符(左端)接收数据
print("Received:", received_message)
# 子进程
def child():
os.dup2(pipe[0], 0) # 将管道复制到标准输入
os.execvp("cat", ["cat"]) # 执行cat命令,读取标准输入显示数据
if __name__ == "__main__":
p = os.fork() # 创建子进程
if p == 0: # 如果是子进程
child()
else: # 如果是父进程
parent()
```
在这个例子中,父进程向管道写入一条消息,然后子进程通过管道接收这个消息并打印出来。当子进程执行`os.execvp("cat", ["cat"])`时,实际上替换为一个新的进程,该进程会读取其标准输入(也就是管道),并将内容展示给用户。