用C语言写程序实现在A进程中父进程向B进程发送数据,子进程读取B进程发送的数据;B进程中的父进程接受A进程发送的数据,子进程向A进程发送数据。
时间: 2024-04-21 19:22:45 浏览: 130
你可以使用管道(pipe)来实现进程间的通信。下面是一个用C语言编写的示例程序,实现了在A进程和B进程之间的双向通信:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 256
int main() {
int fd1[2]; // 管道1,用于A向B发送数据
int fd2[2]; // 管道2,用于B向A发送数据
pid_t pid;
if (pipe(fd1) < 0 || pipe(fd2) < 0) {
fprintf(stderr, "创建管道失败\n");
exit(1);
}
pid = fork(); // 创建子进程
if (pid < 0) {
fprintf(stderr, "创建子进程失败\n");
exit(1);
}
if (pid > 0) { // 父进程中
char input_msg[BUFFER_SIZE];
// 关闭管道1的读端和管道2的写端
close(fd1[0]);
close(fd2[1]);
printf("在A进程中输入要发送给B进程的数据:");
fgets(input_msg, BUFFER_SIZE, stdin);
// 向管道1写入数据
write(fd1[1], input_msg, strlen(input_msg) + 1);
char output_msg[BUFFER_SIZE];
// 从管道2读取数据
read(fd2[0], output_msg, BUFFER_SIZE);
printf("A进程收到B进程的数据:%s", output_msg);
// 关闭管道1的写端和管道2的读端
close(fd1[1]);
close(fd2[0]);
} else { // 子进程中
char output_msg[BUFFER_SIZE];
// 关闭管道1的写端和管道2的读端
close(fd1[1]);
close(fd2[0]);
char input_msg[BUFFER_SIZE];
// 从管道1读取数据
read(fd1[0], input_msg, BUFFER_SIZE);
printf("B进程收到A进程的数据:%s", input_msg);
printf("在B进程中输入要发送给A进程的数据:");
fgets(output_msg, BUFFER_SIZE, stdin);
// 向管道2写入数据
write(fd2[1], output_msg, strlen(output_msg) + 1);
// 关闭管道1的读端和管道2的写端
close(fd1[0]);
close(fd2[1]);
}
return 0;
}
```
该程序创建了两个管道,fd1用于A进程向B进程发送数据,fd2用于B进程向A进程发送数据。父进程负责从标准输入中读取数据,并将数据写入fd1,然后从fd2读取B进程发送的数据并输出。子进程负责从fd1读取A进程发送的数据并输出,然后从标准输入中读取数据,并将数据写入fd2。
你可以编译并运行该程序,观察A进程和B进程之间的通信效果。
阅读全文