在C++中使用管道實(shí)現(xiàn)進(jìn)程間通信可以通過以下步驟:
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int fd[2];
if (pipe(fd) < 0) {
std::cerr << "Error creating pipe" << std::endl;
return 1;
}
pid_t pid = fork();
if (pid < 0) {
std::cerr << "Error forking" << std::endl;
return 1;
} else if (pid == 0) {
// 子進(jìn)程
close(fd[0]); // 關(guān)閉讀端
char message[] = "Hello, parent!";
write(fd[1], message, strlen(message) + 1);
close(fd[1]); // 關(guān)閉寫端
} else {
// 父進(jìn)程
close(fd[1]); // 關(guān)閉寫端
char message[100];
read(fd[0], message, sizeof(message));
std::cout << "Received message from child: " << message << std::endl;
close(fd[0]); // 關(guān)閉讀端
}
在這個(gè)例子中,父進(jìn)程創(chuàng)建了一個(gè)管道,并通過fork()
函數(shù)創(chuàng)建了一個(gè)子進(jìn)程。子進(jìn)程向管道中寫入了一條消息,父進(jìn)程從管道中讀取了這條消息并輸出到控制臺(tái)。最后記得關(guān)閉管道的讀寫端來釋放資源。