IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 《Linux C编程完全解密》第10章 进程间通信(IPC) -> 正文阅读

[系统运维]《Linux C编程完全解密》第10章 进程间通信(IPC)

更优秀的介绍: 进程间通信(IPC)介绍

1. 管道

#include <unistd.h>
#include <fcntl.h>

匿名管道(pipe)是一种半双工的通信方式,数据只能单向流动,而且只能在父子进程间使用。

通过匿名管道实现进程间通信的步骤如下:

  • 父进程创建管道,得到两个?件描述符指向管道的两端
  • 父进程fork出子进程,?进程也有两个?件描述符指向同?管道。
  • 父进程关闭fd[0],子进程关闭fd[1],即?进程关闭管道读端,?进程关闭管道写端(因为管道只支持单向通信)。?进程可以往管道?写,?进程可以从管道?读,管道是?环形队列实现的,数据从写端流?从读端流出,这样就实现了进程间通信。

高级管道(popen)将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。

有名管道 (named pipe) 也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

2. 信号

#include <signal.h>

信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

3. 信号量

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

Linux中信号量有两组接口:

  1. POSIX技术规范,常用于线程
  2. System V信号量,常用于进程

为了使信号量能够在进程间共享数据,需能够执行原子操作(一组操作不允许中断,要么全部执行,要么都不执行),信号量必须由内核提供。

Linux通过内核维护了一个semid_ds数据结构实例,定义在头文件linux/sem.h。
其中包含__kernel_time_t 数据结构。

  • 信号量sv>0时,表示当前可用资源的数量
  • 信号量sv=0时,表示当前可用资源已被占用

4. 共享内存

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

允许两个不相关的进程同时访问一块内存空间,如果一个进程向这段共享内存写了数据,其他进程就会立即看到。

由于共享内存机制本身不能处理同步问题,因此它长和其他通信机制(如信号量)结合使用。

Linux通过内核维护了一个shmid_ds数据结构实例,定义在头文件linux/shm.h。
其中包含__kernel_time_t、__kernel_ipc_pid_t 数据结构。

5. 消息队列

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

消息队列是一个存放在内核的消息链表,它允许一个或多个进程向它读写消息。

消息队列克服了信号量传递信息少,管道只能支持无格式字节流和缓冲区受限的缺陷,另外消息队列不需要进程自己来提供同步机制。

Linux用一个msg_queue结构来保存消息队列的队列头(链表的头指针)。

套接字通信

套接字(socket)与其他通信机制不同的是,它可用于不同机器间的进程通信。

bind,listen,accept,connect,read,write,close

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:27:52  更:2022-01-08 14:28:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:59:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码