【Linux】进程间通信1——匿名管道
在Linux系统中,匿名管道(pipe)是一种最基本的进程间通信(IPC)机制,它可以用于父进程和子进进程之间的通信。
以下是一个使用匿名管道进行进程间通信的简单例子:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int pipefd[2];
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid > 0) { // Parent process
close(pipefd[0]); // Close read end in parent
const char *msg = "Hello, pipe!";
write(pipefd[1], msg, strlen(msg));
close(pipefd[1]); // Done writing, close write end
} else { // Child process
close(pipefd[1]); // Close write end in child
char buffer[80];
ssize_t bytes_read = read(pipefd[0], buffer, sizeof(buffer) - 1);
if (bytes_read > 0) {
buffer[bytes_read] = '\0'; // Null-terminate the string
printf("Child received message: %s\n", buffer);
}
close(pipefd[0]); // Done reading, close read end
}
return 0;
}
在这个例子中,父进程创建了一个管道,然后创建了一个子进程。父进程关闭了管道的读端,并通过写端发送消息。子进程关闭了管道的写端,并通过读端接收消息。这个通信过程是同步的,因为管道是半双工的,只能单向数据流。
评论已关闭