编写一程序,建立一个管道。同时,父进程生产子进程P1,P2,这两个子进程分别向管道中写入各自的字符串,父进程分别读出它们,并显示出来。
时间: 2024-05-09 11:16:55 浏览: 120
好的,这是一个典型的进程间通信问题,我们可以使用 pipe() 系统调用来建立一个管道,然后使用 fork() 系统调用来产生子进程 P1 和 P2,让它们分别向管道中写入字符串,最后父进程读出并显示它们。以下是示例代码:
```
#include <stdio.h>
#include <unistd.h>
int main()
{
int fd[2]; // 管道文件描述符数组
// 建立管道
if (pipe(fd) == -1) {
perror("pipe error");
return 1;
}
// 创建子进程 P1
pid_t pid1 = fork();
if (pid1 == -1) {
perror("fork error");
return 1;
} else if (pid1 == 0) {
// 子进程 P1 写入字符串到管道中
close(fd[0]); // 关闭管道读端
char* msg1 = "Hello";
write(fd[1], msg1, strlen(msg1) + 1);
close(fd[1]); // 关闭管道写端
return 0;
}
// 创建子进程 P2
pid_t pid2 = fork();
if (pid2 == -1) {
perror("fork error");
return 1;
} else if (pid2 == 0) {
// 子进程 P2 写入字符串到管道中
close(fd[0]); // 关闭管道读端
char* msg2 = "world";
write(fd[1], msg2, strlen(msg2) + 1);
close(fd[1]); // 关闭管道写端
return 0;
}
// 父进程读取管道中的字符串并显示
close(fd[1]); // 关闭管道写端
char buf1[10], buf2[10];
read(fd[0], buf1, sizeof(buf1));
read(fd[0], buf2, sizeof(buf2));
printf("%s %s\n", buf1, buf2);
close(fd[0]); // 关闭管道读端
return 0;
}
```
阅读全文