请编写程序,实现父子进程的管道通信:在原进程里创建一个管道,再创建一个子进程,父进程用管道向子进程发送字符串“Message!”,子进程从管道接收父进程发送的字符串,并显示接收的數據,父进程等
时间: 2024-03-17 22:42:15 浏览: 53
下子进程显示完接收的数据后再继续执行,最后关闭管道。
以下是基于C语言的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
int fd[2];
pid_t pid;
char buf[20];
if (pipe(fd) < 0) {
perror("pipe error");
exit(EXIT_FAILURE);
}
pid = fork();
if (pid < 0) {
perror("fork error");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// 子进程读取管道数据
close(fd[1]); // 关闭写端
ssize_t n = read(fd[0], buf, sizeof(buf));
write(STDOUT_FILENO, buf, n);
close(fd[0]); // 关闭读端
exit(EXIT_SUCCESS);
} else {
// 父进程写入管道数据
close(fd[0]); // 关闭读端
const char* msg = "Message!";
write(fd[1], msg, strlen(msg));
close(fd[1]); // 关闭写端
// 等待子进程结束
wait(NULL);
exit(EXIT_SUCCESS);
}
}
```
在上面的代码中,我们先创建了一个管道,并通过 `fork()` 创建了一个子进程。在父进程中,我们关闭了管道的读端,然后通过 `write()` 向管道写入字符串“Message!”,随后关闭了管道的写端。父进程等待子进程退出后再退出。
在子进程中,我们关闭了管道的写端,然后通过 `read()` 从管道读取数据,并将读取到的数据打印到标准输出上,最后关闭了管道的读端。
执行上述代码后,应该可以看到子进程输出了“Message!”。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)