进程间通信

1. 概述

Linux进程通信手段基本上是从Unix平台上继承的。

image-20230524162034771

  • 最初的Unix IPC:管道、信号
  • System V IPC
    • 消息队列、信号量、共享内存区
    • The Portable Operating System Interface (POSIX)
  • 基于Socket IPC

总结下,Linux进程通信有如下方式:

  • 管道(pipe)和有名管道
  • 信号(signal)
  • 消息队列
  • 共享内存
  • 信号量
  • 套接字(socket)

2. 管道

(1)普通管道

关于管道:

  • 管道由内核管理的一个缓冲区,环形结构
  • 管道特点:单向的、先进先出的、无结构的、固定大小的字节流
    • 当父进程与使用fork创建的子进程直接通信时,发送数据的进程关闭读端,接受数据的进程关闭写端

管道局限性:

  • 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)

(2)命名管道

命名管道,也叫FIFO文件,是一种特殊类型的文件

0 prw-r--r-- 1 sparkandshine wheel 0 May 24 11:23 myfifo

用函数mkfifo创建命名管道,

#include <sys/types.h>
#include <sys/stat.h>

int mkfifo(const char *pathname, mode_t mode);

mode: O_RDONLY, O_WRONLY, O_RDWR, …

管道读写,跟普通文件读写API一样,readwrite

本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2023-05-24 16:38

results matching ""

    No results matching ""