当我们需要在两个进程之间进行通信时,可以使用管道(pipe)来实现。管道是一种特殊的文件,具有一个读取端和一个写入端。它可以用于在父进程和子进程之间传递数据。
在C语言中,可以使用pipe()
函数来创建一个管道。其函数原型如下:
#include <unistd.h>
int pipe(int pipefd[2]);
pipefd
是一个包含两个整数的数组,用于存储管道的文件描述符。pipefd[0]
表示读取端,pipefd[1]
表示写入端。
调用pipe()
函数会创建一个管道,并将读取端和写入端的文件描述符存储在pipefd
数组中。我们可以使用这些文件描述符进行读取和写入操作。
以下是一个简单的例子,展示了如何使用pipe()
函数创建管道并在父子进程之间进行通信:
#include <stdio.h>
#include <unistd.h>
int main() {
int pipefd[2];
int ret = pipe(pipefd);
if (ret == -1) {
perror("pipe");
return 1;
}
pid_t pid = fork();
if (pid == -1) {
perror("fork");
return 1;
} else if (pid == 0) { // 子进程
close(pipefd[0]); // 关闭读取端
// 在写入端写入数据
char message[] = "Hello, parent process!";
write(pipefd[1], message, sizeof(message));
close(pipefd[1]); // 关闭写入端
} else { // 父进程
close(pipefd[1]); // 关闭写入端
// 在读取端读取数据
char buffer[100];
read(pipefd[0], buffer, sizeof(buffer));
printf("Received message from child: %s\n", buffer);
close(pipefd[0]); // 关闭读取端
}
return 0;
}