无名管道双向通信代码
时间: 2024-09-05 17:04:37 浏览: 52
linux无名管道通信机制
在Unix/Linux系统中,无名管道(也称为命名管道或FIFO)是一种特殊的文件,它允许两个进程之间进行无服务器的、全双工的通信,即数据可以同时从两端读写。下面是一个简单的C语言示例,展示了如何创建一个无名管道并进行双向通信:
```c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#define READ_END 0
#define WRITE_END 1
int main(int argc, char *argv[]) {
// 创建管道
int pipefd[2];
if (pipe(pipefd) == -1) {
perror("Pipe failed");
return 1;
}
pid_t child = fork();
if (child == 0) { // 子进程
close(pipefd[WRITE_END]); // 关闭写端,仅保留读端
write(pipefd[READ_END], "Hello from child", 15); // 写入数据
printf("Child wrote to pipe and exited.\n");
exit(0);
} else { // 父进程
close(pipefd[READ_END]); // 关闭读端,仅保留写端
char buffer[16];
read(pipefd[WRITE_END], buffer, sizeof(buffer)); // 从管道读取数据
printf("Parent received: %s\n", buffer);
wait(NULL); // 等待子进程结束
}
return 0;
}
```
在这个例子中,父进程首先创建了一个管道,然后fork出一个子进程。子进程负责向管道写入数据,而父进程则从管道接收数据。每个进程关闭非自身使用的管道端口,实现了单向通信。
阅读全文