C++中如何使用管道實(shí)現(xiàn)進(jìn)程間通信

c++
小億
131
2024-04-02 13:47:58
欄目: 編程語言

在C++中使用管道實(shí)現(xiàn)進(jìn)程間通信可以通過以下步驟:

  1. 包含相關(guān)的頭文件:
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
  1. 創(chuàng)建管道:
int fd[2];
if (pipe(fd) < 0) {
    std::cerr << "Error creating pipe" << std::endl;
    return 1;
}
  1. 創(chuàng)建子進(jìn)程并進(jìn)行通信:
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)閉管道的讀寫端來釋放資源。

0