编写一段程序,实现:在父进程中用pipe()建立一条管道,往管道里写入两句话(字符串),两个子进程分别接收来自父进程写入的两句话并打印输出。
时间: 2024-10-12 11:10:33 浏览: 30
TITF出品:微信小程序实用案例代码片段大全《五》:ES6新特性专辑 ...
在Unix/Linux环境下,你可以使用`fork()`、`pipe()`、`close()`、`waitpid()`以及标准输入/输出流来实现这个过程。这里是一个简单的Python示例,它创建了一个父进程和两个子进程:
```python
import os
# 创建管道
parent_rfd, child_wfd = os.pipe()
def parent():
# 父进程
try:
os.write(parent_rfd, b"这是第一句话.\n") # 写入第一句话
os.write(parent_rfd, b"这是第二句话.\n") # 写入第二句话
os.close(parent_rfd) # 关闭写端
# 子进程的PID列表
children_pids = [os.fork(), os.fork()]
for pid in children_pids:
if pid > 0: # 父进程
os.waitpid(pid, 0)
else: # 子进程
with open(child_wfd, 'rb') as r:
while True:
data = r.read(1024)
if not data:
break
print(data.decode()) # 打印接收到的消息
os._exit(0) # 子进程结束
if __name__ == "__main__":
parent()
```
在这个例子中,父进程首先创建一个管道,并向其中写入两句话。然后它创建两个子进程,并等待它们执行完毕。每个子进程通过读取管道内容来接收信息并将其打印出来。
注意:这个代码假设运行环境支持`os`模块,如Python。其他语言实现可能会有所不同,例如C/C++中使用`fork()`、`pipe()`等系统调用。此外,实际编程时要处理好错误和资源管理,特别是对于文件描述符的关闭。
阅读全文