一、Linux C编程笔记——进程间通信方式

📅 发布时间:2026/7/4 3:53:59 👁️ 浏览次数:
一、Linux C编程笔记——进程间通信方式
进程间通信interprocess communication简称 IPC指两个进程之间的通信。1.进程间通信机制⚫ UNIX IPC管道、FIFO、信号⚫ System V IPC信号量、消息队列、共享内存⚫ POSIX IPC信号量、消息队列、共享内存⚫ Socket IPC基于 Socket 进程间通信。2.管道和FIFO管道是 UNIX 系统上最古老的 IPC 方法把一个进程连接到另一个进程的数据流称为管道管道被抽象成一个文件.管道的类型⚫ 普通管道 pipe通常有两种限制一是单工数据只能单向传输二是只能在父子或者兄弟进程间使用⚫ 流管道 s_pipe去除了普通管道的第一种限制为半双工可以双向传输只能在父子或兄弟进程间使用⚫ 有名管道 name_pipeFIFO去除了普通管道的第二种限制并且允许在不相关不是父子或兄弟关系的进程间进行通讯。即可实现双向传输、又能在非亲缘关系的进程间通信3.信号用于通知接收信号的进程有某种事件发生所以可用于进程间通信除了用于进程间通信之外进程还可以发送信号给进程本身。4.消息队列消息队列是消息的链表存放在内核中并由消息队列标识符标识消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺陷。消息队列包括 POSIX 消息队列和 System V 消息队列。消息队列是 UNIX 下不同进程之间实现共享资源的一种机制UNIX 允许不同进程将格式化的数据流以消息队列形式发送给任意进程有足够权限的进程可以向队列中添加消息被赋予读权限的进程则可以读走队列中的消息。5.信号量信号量是一个计数器与其它进程间通信方式不大相同它主要用于控制多个进程间或一个进程内的多个线程间对共享资源的访问相当于内存中的标志进程可以根据它判定是否能够访问某些共享资源同时进程也可以修改该标志除了用于共享资源的访问控制外还可用于进程同步。它常作为一种锁机制防止某进程在访问资源时其它进程也访问该资源因此主要作为进程间以及同一个进程内不同线程之间的同步手段。Linux 提供了一组精心设计的信号量接口来对信号量进行操作它们声明在头文件 sys/sem.h 中。6.共享内存共享内存就是映射一段能被其它进程所访问的内存这段共享内存由一个进程创建但其它的多个进程都可以访问使得多个进程可以访问同一块内存空间。共享内存是最快的IPC方式它是针对其它进程间通信方式运行效率低而专门设计的它往往与其它通信机制譬如结合信号量来使用以实现进程间的同步和通信。7.套接字SocketSocket 是一种 IPC 方法是基于网络的 IPC 方法允许位于同一主机计算机或使用网络连接起来的不同主机上的应用程序之间交换数据说白了就是网络通信。在一个典型的客户端/服务器场景中应用程序使用 socket 进行通信的方式如下⚫ 各个应用程序创建一个 socket。socket 是一个允许通信的“设备”两个应用程序都需要用到它。⚫ 服务器将自己的 socket 绑定到一个众所周知的地址名称上使得客户端能够定位到它的位置。