乓球(简易) 写一个程序,使用UNIX系统调用“在两个进程之间通过一对管道来回发送一个字节,每个方向一个。父进程应该向进程发送一个字节;子进程应该打印“d>:收到ping”,其中 <pid
时间: 2024-09-19 08:08:22 浏览: 43
UNIX 操作系统基础实验 - 利用管道实现两个进程的通信.pdf
乒乓球游戏,也称为ping-pong实验,在Unix/Linux系统中常常用来展示进程间通信(IPC)的基本原理,特别是使用管道(pipe)。这里是一个简单的Python脚本,它模拟了这个过程。在这个例子中,我们将创建一个父进程和一个子进程,通过管道进行数据交换。
```python
import os
def parent_process():
# 创建管道
pipe = os.pipe()
# 父进程写入管道
child_pid = os.fork() # 创建子进程
if child_pid == 0: # 子进程
os.close(pipe[1]) # 关闭写端
data = "ping"
os.write(pipe[0], data.encode()) # 向管道写入
print(f"子进程 {os.getpid()} 接收到了 ping")
os._exit(0) # 结束子进程
else: # 父进程
os.close(pipe[0]) # 父进程关闭读端
received_data = os.read(pipe[1], 1024) # 从管道接收
print(f"父进程 {os.getpid()} 收到的数据: {received_data.decode()}")
os.wait() # 等待子进程结束
parent_process()
```
这个程序首先创建了一个管道,然后启动一个子进程。在子进程中,它关闭写端并写入一个字节"ping",然后打印一条消息表示接收到ping。在父进程中,它关闭读端,读取管道的内容,然后显示收到的数据,并等待子进程结束。
请注意,实际的UNIX系统调用会更复杂,因为上述代码示例是基于Python的。在Unix环境下,你可能会用C语言或其他系统调用直接操作文件描述符或fork/exec函数来进行类似的操作。
阅读全文