实现父子进程之间的轮流通信 父进程发一句 子进程发一句 如果输入quit,就会结束通信
时间: 2024-04-11 20:27:16 浏览: 199
要实现父子进程之间的轮流通信,可以使用管道(pipe)来进行进程间的通信。下面是一个示例代码,演示了父进程和子进程之间轮流发送消息的过程:
```c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 100
int main() {
int pipe_fd[2];
char buffer[BUFFER_SIZE];
if (pipe(pipe_fd) == -1) {
perror("Failed to create pipe");
return 1;
}
pid_t pid = fork();
if (pid == -1) {
perror("Failed to create child process");
return 1;
}
if (pid == 0) {
// Child process
close(pipe_fd[1]); // 关闭写端
while (1) {
memset(buffer, 0, sizeof(buffer));
ssize_t count = read(pipe_fd[0], buffer, BUFFER_SIZE);
if (count == -1) {
perror("Failed to read from pipe");
break;
}
printf("Child process received: %s\n", buffer);
if (strcmp(buffer, "quit") == 0) {
break;
}
}
close(pipe_fd[0]); // 关闭读端
} else {
// Parent process
close(pipe_fd[0]); // 关闭读端
while (1) {
printf("Enter message (quit to exit): ");
fgets(buffer, BUFFER_SIZE, stdin);
buffer[strlen(buffer) - 1] = '\0'; // 去掉末尾的换行符
ssize_t count = write(pipe_fd[1], buffer, strlen(buffer));
if (count == -1) {
perror("Failed to write to pipe");
break;
}
if (strcmp(buffer, "quit") == 0) {
break;
}
}
close(pipe_fd[1]); // 关闭写端
}
return 0;
}
```
在上面的代码中,首先创建了一个管道pipe_fd,然后通过fork()函数创建了子进程。在父进程中,关闭了管道的读端,然后进入一个循环,等待用户输入消息。父进程通过write()函数将用户输入的消息写入管道。如果用户输入的消息为"quit",则终止循环并关闭管道的写端。
在子进程中,关闭了管道的写端,然后进入一个循环,通过read()函数读取父进程发送的消息。如果收到的消息为"quit",则终止循环并关闭管道的读端。
需要注意的是,父子进程之间的通信是通过管道实现的,写端和读端必须在合适的时候关闭,以确保通信的正确性。另外,在实际应用中,还需要考虑进程间同步和错误处理等问题。
阅读全文