在Linux系统中,匿名管道(pipe)是一种常见的进程间通信(IPC)机制。它通常用于父进程和子进程之间,或者兄弟进程之间的通信。
以下是一个简单的例子,展示了如何在VSCode的终端中使用匿名管道进行进程间通信:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int pipefd[2];
pid_t pid;
char buf;
const char* msg = "Hello, pipe!";
// 创建匿名管道
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
// 创建子进程
if ((pid = fork()) == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid > 0) { // 父进程
// 关闭子进程读端
close(pipefd[0]);
// 父进程写入数据到管道
write(pipefd[1], msg, strlen(msg));
close(pipefd[1]);
printf("Parent: Message sent\n");
} else { // 子进程
// 关闭父进程写端
close(pipefd[1]);
// 子进程从管道读取数据
read(pipefd[0], &buf, 1);
printf("Child: Received %c\n", buf);
close(pipefd[0]);
}
return 0;
}
在这个例子中,父进程创建了一个匿名管道,然后创建了一个子进程。父进程通过管道的写端(pipefd[1])发送消息给子进程,子进程通过管道的读端(pipefd[0])接收消息。
请注意,管道通信是单向的,如果需要双向通信,你需要创建两个管道。此外,管道通信的数据是字节流,没有消息边界的概念,因此通常需要协议来确定消息的边界。