编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。
时间: 2024-02-22 16:54:51 浏览: 26
好的,下面是实现进程的管道通信的代码,使用了pipe和fork系统调用:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int fd[2];
pid_t pid1, pid2;
char message1[] = "Child 1 is sending a message!";
char message2[] = "Child 2 is sending a message!";
char buffer[50];
if (pipe(fd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid1 = fork();
if (pid1 == -1) {
perror("fork 1");
exit(EXIT_FAILURE);
} else if (pid1 == 0) { // 子进程1
close(fd[0]); // 关闭管道读取端
write(fd[1], message1, strlen(message1) + 1);
close(fd[1]);
exit(EXIT_SUCCESS);
}
pid2 = fork();
if (pid2 == -1) {
perror("fork 2");
exit(EXIT_FAILURE);
} else if (pid2 == 0) { // 子进程2
close(fd[0]); // 关闭管道读取端
write(fd[1], message2, strlen(message2) + 1);
close(fd[1]);
exit(EXIT_SUCCESS);
}
close(fd[1]); // 关闭管道写入端
// 父进程从管道中读出信息
read(fd[0], buffer, sizeof(buffer));
printf("%s\n", buffer);
read(fd[0], buffer, sizeof(buffer));
printf("%s\n", buffer);
close(fd[0]);
return 0;
}
```
运行结果:
```
Child 1 is sending a message!
Child 2 is sending a message!
```
以上代码实现了进程的管道通信,子进程1和子进程2分别向管道写入一条消息,父进程则从管道中读出这两条消息并显示。注意,父进程必须在两个子进程都创建完后才能读取管道中的数据。