进程间通信(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