进程间通信(IPC)的多种方式(一)

进程间通信(InterProcess Communication, 简称IPC),是指在不同进程之间交换或传递数据。 以Linux系统为例。

方式一:无名管道(pipe)

无名管道用于从父进程向子进程单向传递数据。 在Linux系统的头文件中,定义了用于开启一个无名管道的函数pipe()。 函数原型如下:

int pipe(int* ___pipedes);

这里的pipedes地址,需要传入的实际上是一个2位大小的int型数组地址。我们假设这个数组为pipe_fd[2],那么pipe_fd[0]是管道读取端的文件标识符,pipe_fd[1]是管道写入端的文件标识符。

以下是一个程序示例。在这个示例中,由该程序通过调用fork()函数创建出一个自身的副本,这个副本会作为该程序所属进程的子进程而存在。

#include 
#include 
int main()
{
    // 创建两个管道的文件标识符,分别标识管道的两头
    int pipe_fd[2] = {0};
    char buffer[35] = {0};
    // pid记录由父线程fork出来的子线程的线程ID
    pid_t pid = 0;
    if(pipe(pipe_fd) < 0)   // pipe函数用于开启管道,传入值是管道文件标识符数组,创建成功后两个文件标识符原地传出,1为写,0为读,是单向的
    {
        std::cout