编写程序实现A进程和B进程之间的双向通信。 1、A进程和B进程,使用命名管道和父子进程进行全双工双向实时通信。
时间: 2024-09-28 08:08:53 浏览: 68
p192 - p219 进程和线程之间的通信
编写A进程和B进程之间的双向通信,可以借助Linux系统提供的命名管道(FIFO,也称作无名管道或管端口)。以下是使用Python的一个简单示例,这里我们用`os`和`fcntl`模块:
首先,创建一个命名管道:
```python
import os
# 创建管道
pipe_name = 'my_pipe'
if not os.path.exists(pipe_name):
os.mkfifo(pipe_name)
```
然后,在A进程中读取和写入管道:
```python
def parent():
# A进程打开管道进行写操作
with open(pipe_name, 'w') as writer:
while True:
message = input("Parent (A): ")
writer.write(message + '\n')
print(f"Message sent to pipe: {message}")
# 启动A进程
from subprocess import Popen, PIPE
p = Popen(['python', '-c', f'parent()'], stdin=PIPE, stdout=PIPE)
```
在B进程中接收并处理消息:
```python
def child():
# B进程打开管道进行读操作
with open(pipe_name, 'r') as reader:
while True:
message = reader.readline()
if message:
print(f"Child (B) received: {message.strip()}")
# 启动B进程,作为子进程运行
p = Popen(['python', '-c', f'child()'])
```
现在,A进程向管道发送信息,B进程会接收到,并反之亦然。这是一个简单的示例,实际应用中可能需要考虑错误处理、线程同步等问题。
阅读全文