C/C++Unix网络编程-IPC简介

article/2025/9/27 15:31:31

IPC是进程间通信的简称。

进程、线程与信息共享

Unix进程间的信息共享的方式:
在这里插入图片描述
(1) 左边的两个进程共享存留于文件系统中某个文件上的某些信息。为访问这些信息、每个进程都得穿越内核(例如read、write、lseek等)。当一个文件有待更新时,某种形式的同步是必要的,这样既可保护多个写入者,防止相互串扰,也可保护一个或多个读出者,防止写入者的干扰。

(2)中间的两个进程共享驻留于内核中的某些信息。是这种共享类型的一个例子,System V消息队列和System V信号量也是。现在访问共享信息的每次操作涉及对内核的一次系统调用

(3)右边的两个进程有一个双方都能访问的共享内存区。每个进程一旦设置好该共享内存区,就能根本不涉及内核而访问其中的数据。共享该内存区的进程需要某种形式的同步。

IPC对象的持续性

在这里插入图片描述
(1)随进程持续的( process-persistent)IPC对象一直存在到打开着该对象的最后一个进程关闭该对象为止。例如管道和FIFO就是这种对象。

(2)随内核持续的(kernel-persistent)IPC对象一直存在到内核重新自举或显式删除该对象为止。例如System V的消息队列、信号量和共享内存区就是此类对象。Posix的消息队列、信号量和共享内存区必须至少是随内核持续的,但也可以是随文件系统持续的,具体取决于实现。

(3)随文件系统持续的( filesystem-persistent)IPC对象一直存在到显式删除该对象为止。即使内核重新自举了,该对象还是保持其值。Posix消息队列、信号量和共享内存区如果是使用映射文件实现的(不是必需条件),那么它们就是随文件系统持续的。但是这种情况很少见,不可能说已经重新自举了内核,却还有老进程活着的情况。

在这里插入图片描述

名字空间

在这里插入图片描述

fork、exec、和exit对IPC对象的影响

在这里插入图片描述

Posix IPC

  • Posix消息队列
  • Posix信号量
  • Posix共享内存区

PosixIPC函数汇总:
posix标准,独爱下划线。
在这里插入图片描述

创建与打开IPC通道

mg_open、sem_open和shm_open这三个创建或打开一个IPC对象的函数,它们的名为oflag的第二个参数指定怎样打开所请求的对象。
在这里插入图片描述
oflag:
在这里插入图片描述
前3行指定怎样打开对象:只读、只写或读写。消息队列能以其中任何一种模式打开,信号量的打开不指定任何模式(任意信号量操作,都需要读写访问权),共享内存区对象则不能以只写模式打开。

余下的4个标志是可选的:

O_EXCL:
如果该标志和O_CREAT一起指定,那么IPC函数只在所指定名字的消息队列、信号量或共享内存区对象不存在时才创建新的对象,如果该对象已经存在,而且指定了o_CREAT |O_EXCL,那么返回一个EEXIST错误。检查存在和创建这两步一定是原子的。

O_NONBLOCK:
该标志使得一个消息队列在队列为空时实或队列填满时的写不被阻塞。

O_TRUNC:
如果以读写模式打开了一个已存在的共享内存区对象,那么该标志将使得该对象的长度被截成0。

O_CREAT:
若不存在,则创建,创建时需要指定mode参数(指定权限):
在这里插入图片描述
这些常值定义在<sys/stat.h>头文件中。所指定的权限位受当前进程的文件模式创建掩码(file mode creation mask)修正,而该掩码可通过调用umask函数(APUE第83~85页)或使用shell的umask命令来设置。
跟新创建的文件一样,当创建一个新的消息队列、信号量或共享内存区对象时,其用户ID被置为当前进程的有效用户ID。信号量或共享内存区对象的组ID被置为当前进程的有效组ID或某个系统默认组ID。新消息队列对象的组ID则被置为当前进程的有效组ID。

打开一个IPC对象的真正逻辑流程:
在这里插入图片描述
在这里插入图片描述

IPC权限

权限的讲解不用太复杂,你以某一种权限创建出来一个IPC,它就是一个文件描述符,既然是文件,就有读写权限,和Linux文件系统一样。

System V IPC

  • System V 消息队列
  • System V 信号量
  • System V 共享内存区

在这里插入图片描述

在这里插入图片描述

key_t键和ftok函数

三种类型的System V IPC使用key_t值作为它们的名字。头文件<sys/types.h>把key_t这个数据类型定义为一个整数,它通常是一个至少32位的整数。这些整数值通常是由ftok函数赋予的。

函数ftok把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键。
在这里插入图片描述
该函数假定对于使用System V IPC的某个给定应用来说,客户和服务器同意使用对该应用有一定意义的pathname。它可以是服务器守护程序的路径名、服务器使用的某个公共数据文件的路径名或者系统上的某个其他路径名。如果客户和服务器之间只需单个IPC通道,那么可以使用譬如说值为1的id。如果需要多个IPC通道,譬如说从客户到服务器一个通道,从服务器到客户又一个通道,那么作为一个例子,一个通道可使用值为l的id,另一个通道可使用值为2的id。客户和服务器一旦在pathname和id上达成一致,双方就都能调用ftok函数把pathname和id转换成同一个IPC键。

ipc_perm结构

在这里插入图片描述

创建和打开IPC通道

创建或打开一个IPC对象的三个XXXget函数的第一个参数key是类型为key_t的IPC键,返回值identifier是一个整数标识符。该标识符不同于ftok函数的id参数,我们不久就会看到。对于key值,应用程序有两种选择。
(1)调用ftok,给它传递pathname和id。
(2)指定key为IPC_PRIVATE,这将保证会创建一个新的、唯一的IPC对象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ipcs和ipcrm程序

使用 ipcs 命令可以查看已经存在的ipc,使用ipcrm 杀掉不用的ipc。

由于System V IPC的三种类型不是以文件系统中的路径名标识的,因此使用标准的1s和rm程序无法看到它们,也无法删除它们。不过实现了这些类型IPC的任何系统都提供两个特殊的程序: ipcs和ipcrm。 ipcs输出有关System V IPC特性的各种信息,ipcrm则删除一个System V消息队列、信号量集或共享内存区。前者支持十来个命令行选项,它们决定报告哪种类型的IPC以及输出哪些信息,后者支持6个命令行选项。所有这些选项的详细信息可查阅它们的手册页面。

不喜欢使用System V标准的IPC,不好用,而且大部分限制还要修改内核。


http://chatgpt.dhexx.cn/article/hMa57X6F.shtml

相关文章

CTP For Python

GitHub地址&#xff1a;https://github.com/shizhuolin/PyCTP 这是程序化期货交易上期ctp接口版本.将其包装为python版本. 支持python3 编译需求:vs2010/gcc 编译方法 python setup.py build PyCTP 编译方法 开发环境&#xff1a;windows 10 64bit, python 3.4.3 32bit, Visu…

CSP-S 2021

[CSP-S 2021] 括号序列 题目描述 小 w 在赛场上遇到了这样一个题&#xff1a;一个长度为 n n n 且符合规范的括号序列&#xff0c;其有些位置已经确定了&#xff0c;有些位置尚未确定&#xff0c;求这样的括号序列一共有多少个。 身经百战的小 w 当然一眼就秒了这题&#x…

CyberSploit:1

一、环境搭建 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/cybersploit-1,506/ 二、漏洞复现 探测靶机ip地址&#xff0c;得到靶机IP地址 nmap扫描服务以及端口&#xff0c;发现80和22端口 访问80端口&#xff0c;看到一个页面&#xff0c;查看源码未发现东西 …

[网络安全]dSploit-Android系统下的网络分析和渗透套件的使用

一、准备工作 一台已经获得root权限的安卓手机&#xff0c;并且安卓系统版本在 2.3 以上 busyBox 安装软件 下载地址 BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。&#xff3b;百度百科&#xff3d; 安装这个软件主要是为dsploit软件的运行提供 linux 中…

记一次无线渗透

用到的工具 一台root的安卓手机&#xff08;我这台手机刷了miui9&#xff09; Csploit 安卓渗透神器 下载地址&#xff1a;https://github.com/cSploit/android/releases Kali meterpreter 当然你有Kali的Nethunter设备更好 开始测试 利用万能钥匙找一波wifi&#xff0c;运气好…

为网络安全红队方向提供的资源,工具大合集(渗透测试)

这是一份必备的资源大合集&#xff0c;收录了最优秀的网络安全红队方向&#xff08;渗透测试&#xff09;的资源和工具。 &#xff08;文末领取读者福利&#xff09; 无论您是初学者还是专业人士&#xff0c;都能从中获得所需的技能和知识。 在这个信息化时代&#xff0c;网络…

如何在网站中插入视频

&#xfeff;&#xfeff; 很多新手站长在往自己网站里&#xff0c;添加土豆优酷等视频网站里的视频时&#xff0c;会遇到一些麻烦,珊珊在这里向大家介绍一种简单方法. 1.首先要找到要插入的视频&#xff0c;如下图点击分享给朋友右侧的小按钮. 2.点击按钮后弹出一个窗口点击复…

Word中轻松插入本地视频

场景 在Word文档中插入视频 实现 新建或打开Word文档 找到上面插入菜单栏&#xff0c;点击并选择对象 点击后选择PPT 点击确定 此时会打开PPT&#xff0c;然后再选择上面的插入 选择插入下的视频选项&#xff0c;然后选择PC上的视频 选择视频后点击插入 可以调整视频大小 …

如何在html里插入视频

第一步&#xff1a;首先下载video.js&#xff0c;百度一下就能找到。 这个是下载后的目录。 第二步&#xff1a;先把要用到的js\css\swf都加载到html页面上。 如&#xff1a; 第三步&#xff1a;加入下面的代码&#xff1a; <video id"my_video_1" class"…

制作往图片里插入视频,视频添加到图片上播放

在视频中还有个小视频同时播放&#xff0c;这种画中画的效果以前都学习过&#xff0c;那在图片上插入视频播放&#xff0c;可以用媒体梦工厂中的画中画功能来制作吗&#xff1f;这个肯定是可以的了。下面就来看看怎么的操作的吧。 先来看看图片加视频制作出来的画中画效果 制作…

插入视频--使用<video>标签为网页添加视频

使用方法 举例 显示结果 在网页上添加视频和添加音频的标签属性用法相同。 讲解 1.autoplay:如果出现该属性&#xff0c;则视频在就绪后马上播放。 2.controls:如果出现该属性&#xff0c;则向用户显示控件&#xff0c;比如播放按钮。 3.loop:如果出现该属性&#xff0c;…

视频剪辑工具,如何批量在图片中插入视频

怎么批量在图片中插入视频呢&#xff1f;其实这是一种很常见的效果&#xff0c;那么这种效果是怎么制作的呢&#xff1f;下面随小编一起来操作。 所需工具 多张图片、视频素材 操作步骤 运行媒体梦工厂&#xff0c;将图片导入画中画板块中的“底画”中&#xff0c;多张图片&…

教你给视频画面任意位置插入GIF图

视频怎么添加GIF图片呢&#xff1f;如何在视频任意位置添加的呢&#xff1f;其实很简单。教你这个简单的剪辑方法。一起来试试吧。 准备工具&#xff1a; 视频素材及动图 下载一个视频剪辑高手 开始操作&#xff1a; 运行软件登录上&#xff0c;在多种功能上选择“批量剪辑视…

计算机word如何提交,如何在word添加视频?

您可以从计算机或Internet添加视频以直接在Word文档中播放。 此功能使您(或与您共享文档的人)可以直接观看视频而无需离开文档。 将视频添加到Word文档 将离线视频(或计算机存储中的视频)添加到Word文档的不利之处在于&#xff0c;它们只能在您的PC上播放。 如果您将文档发送给…

如何在html网页中插入视频(以及让视频自动播放的问题)

直接进入正题&#xff1a; 关于视频的插入可使用 video标签 如下图 简单介绍下用到的几个属性 class定义了video类 在style中调整这个类的长度和高度属性&#xff1b; src处引入视频的链接&#xff1b; controls属性&#xff1a;允许用户控制视频的播放&#xff0c;包括音…

HTML插入视频和音频

一、插入视频 src表示视频来源位置 height表示视频高度 autoplay表示视频自动播放 loop表示循环播放 controls表示进度控制条 muted表示静音播放 poster表示视频封面所用的图片路径 video/mp4表示视频的格式 例如&#xff1a; <video src"images\sp1.mp4&quo…

如何在html中加入视频

第一步&#xff1a;首先下载video.js&#xff0c;百度一下就能找到。 这个是下载后的目录。 第二步&#xff1a;先把要用到的js\css\swf都加载到html页面上。 如&#xff1a; <link href"video-js/video-js.css" rel"stylesheet" type"text/css&qu…

关于使用video标签插入视频时,视频无法播放的问题

写代码遇到一个问题&#xff1a;使用video标签插入视频时&#xff0c;在chrome中无法播放&#xff0c;只显示了一个封面图片&#xff0c;在ie却可以播放。 video的使用是看别人的&#xff1a; 由于照搬别人的代码&#xff0c;我写的代码如下&#xff1a; <video width&q…

HTML视频插入

本文介绍两种视频插入方法&#xff08;为了防止有些视频播放不了不要放中文路径&#xff09; 第一种页面显示视频使用video标签&#xff1a; <video width"320" height"240" controls"controls"><source src"mp4/qq.mp4" &g…

如何在网页中插入视频

想在网页中插入视频从网上搜索了大概有以下两种方法&#xff1a; 是由HTML5自带的标签&#xff0c;这个标签就可以适用于很多的浏览器&#xff0c;但是对视频的格式有很高的要求&#xff0c;假如你是MP4的视频格式&#xff0c;那么就要求你的编码方式一定要是AVC(H264)的。建议…