使用 pipe() 函数创建了一个匿名管道,然后通过 fork() 函数创建了一个子进程。父进程向管道中写入字符串 "Hello, world!",而子进程从管道中读取数据并输出。
时间: 2024-03-16 16:42:48 浏览: 89
好的,这是一个关于使用pipe()函数和fork()函数创建匿名管道并进行进程间通信的问题。以下是实现该功能的代码:
```c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd[2];
pid_t pid;
char message[] = "Hello, world!";
// 创建匿名管道
if (pipe(fd) < 0) {
printf("Pipe failed!");
return 1;
}
// 创建子进程
pid = fork();
if (pid < 0) {
printf("Fork failed!");
return 1;
} else if (pid == 0) {
// 子进程从管道中读取数据并输出
char buffer[100];
close(fd[1]);
read(fd[0], buffer, sizeof(buffer));
printf("Child process received: %s\n", buffer);
close(fd[0]);
} else {
// 父进程向管道中写入数据
close(fd[0]);
write(fd[1], message, strlen(message) + 1);
close(fd[1]);
}
return 0;
}
```
这个程序中,我们首先使用pipe()函数创建一个匿名管道。如果pipe()函数返回值小于0,表示创建管道失败。接着,我们使用fork()函数创建一个子进程。如果pid小于0,表示创建子进程失败;如果pid等于0,表示当前进程是子进程;否则,当前进程是父进程。
在父进程中,我们关闭管道中的读端,然后使用write()函数向管道中写入字符串"Hello, world!",最后关闭管道中的写端。在子进程中,我们关闭管道中的写端,然后使用read()函数从管道中读取数据,并输出到控制台上,最后关闭管道中的读端。
希望我的回答能够解决你的问题!
阅读全文