通过匿名管道实现父子进程间的通信,实现如下功能: 父进程给子进程发信息:fighting,child,you are my hope! 子进程给父进程发信息:fighting,parent,you are my example!
时间: 2024-03-01 17:52:51 浏览: 21
好的,这个问题涉及到进程间通信,可以使用匿名管道来实现父子进程之间的通信。具体实现步骤如下:
1. 创建一个匿名管道,使用 pipe() 函数即可。
2. 创建子进程,使用 fork() 函数即可。
3. 在父进程中,通过管道的写端将数据发送给子进程,使用 write() 函数即可。
4. 在子进程中,通过管道的读端接收数据,使用 read() 函数即可。
5. 在子进程中,通过管道的写端将数据发送给父进程,使用 write() 函数即可。
6. 在父进程中,通过管道的读端接收数据,使用 read() 函数即可。
下面是示例代码:
```c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 256
int main() {
int fd[2];
pid_t pid;
char write_buffer[BUFFER_SIZE] = "fighting, child, you are my hope!";
char read_buffer[BUFFER_SIZE] = "";
// 创建管道
if (pipe(fd) < 0) {
printf("Error: pipe failed.\n");
return -1;
}
// 创建子进程
pid = fork();
if (pid < 0) {
printf("Error: fork failed.\n");
return -1;
} else if (pid == 0) { // 子进程
close(fd[1]); // 关闭管道的写端
// 从管道中读取数据
if (read(fd[0], read_buffer, BUFFER_SIZE) < 0) {
printf("Error: read failed.\n");
return -1;
}
printf("%s\n", read_buffer);
// 向父进程发送数据
char child_message[] = "fighting, parent, you are my example!";
if (write(fd[1], child_message, strlen(child_message) + 1) < 0) {
printf("Error: write failed.\n");
return -1;
}
close(fd[0]); // 关闭管道的读端
} else { // 父进程
close(fd[0]); // 关闭管道的读端
// 向子进程发送数据
if (write(fd[1], write_buffer, strlen(write_buffer) + 1) < 0) {
printf("Error: write failed.\n");
return -1;
}
// 等待子进程发送数据
wait(NULL);
// 从管道中读取数据
if (read(fd[0], read_buffer, BUFFER_SIZE) < 0) {
printf("Error: read failed.\n");
return -1;
}
printf("%s\n", read_buffer);
close(fd[1]); // 关闭管道的写端
}
return 0;
}
```
这个程序运行后,会输出以下内容:
```
fighting, child, you are my hope!
fighting, parent, you are my example!
```
这就说明父子进程间的通信已经成功实现了。
阅读全文