linux 中的pipe
时间: 2024-09-18 13:05:42 浏览: 36
在Linux中,`pipe()`是一个系统调用,它允许用户创建一个管道(pipe),这是一种特殊类型的半双工(half-duplex)通信机制,可以在两个进程间建立一条连接,使得它们能够像通过文件一样进行数据交换,而不需要共享内存或套接字。
当你调用`pipe()`函数时,它会返回两个文件描述符(file descriptors)。第一个描述符是一个读端口(read end),第二个描述符是一个写端口(write end)。进程可以向写端口写入数据,而另一个进程可以从读端口读取数据。
下面是一个简单的例子:
```bash
#include <unistd.h>
#include <stdio.h>
int main() {
int pipefd[2]; // 定义一个pipe数组,包含两个元素
if (pipe(pipefd) == -1) { // 如果创建失败,返回错误码
perror("Pipe creation failed");
return 1;
}
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
close(pipefd[0]); // 关闭父进程中未使用的读端口
char msg[] = "Hello from child!";
write(pipefd[1], msg, strlen(msg) + 1); // 写入消息到管道
exit(0);
} else {
close(pipefd[1]); // 父进程关闭写端口
char buffer[100]; // 接收消息缓冲区
read(pipefd[0], buffer, sizeof(buffer)); // 从读端口读取消息
printf("Received: %s\n", buffer);
wait(NULL); // 等待子进程结束
}
return 0;
}
```
在这个例子中,父进程创建了一个管道,并将其传递给子进程。子进程向管道写入信息,然后退出;父进程则读取并打印子进程的信息。
阅读全文