调用 pipe()创建一个无名管道
时间: 2023-08-13 07:08:30 浏览: 97
匿名管道的实现 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。
好的,下面是一个使用 `pipe()` 函数创建无名管道的例子:
```c
#include <stdio.h>
#include <unistd.h>
int main() {
int fd[2]; // 用于存放管道读写端的文件描述符
char buf[20]; // 用于存放从管道中读取的数据
if (pipe(fd) == -1) { // 创建无名管道
perror("pipe");
return 1;
}
pid_t pid = fork(); // 创建子进程
if (pid == -1) { // fork() 函数调用失败
perror("fork");
return 1;
} else if (pid == 0) { // 子进程
close(fd[1]); // 关闭管道写端
printf("Child process is reading from pipe...\n");
read(fd[0], buf, sizeof(buf)); // 从管道读端读取数据
printf("Child process read: %s\n", buf);
close(fd[0]); // 关闭管道读端
} else { // 父进程
close(fd[0]); // 关闭管道读端
printf("Parent process is writing to pipe...\n");
write(fd[1], "Hello, pipe!", 13); // 向管道写端写入数据
close(fd[1]); // 关闭管道写端
}
return 0;
}
```
在上面的例子中,首先调用 `pipe()` 函数创建了一个无名管道,然后调用 `fork()` 函数创建了一个子进程。在子进程中,关闭了管道写端,然后从管道读端读取数据,并将读取的数据输出到屏幕上。在父进程中,关闭了管道读端,然后向管道写端写入数据。最后,父进程和子进程都关闭了管道的读写端。
希望这个例子能够帮助到您!
阅读全文