进程间通信(1) - IPS概述

2023-12-08 01:58
文章标签 概述 间通信 进程 ips

本文主要是介绍进程间通信(1) - IPS概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1. IPS概述

2. 查看IPS对象

3. 删除IPS对象

4. ftok函数


1. IPS概述

    IPS全称是Inter-Process Communication(进程间通信),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位(严格说来是线程)。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一台计算机上或连网的不同计算机上。
    Linux中,与IPC相关的命令包括:ipcs、ipcrm。

2. 查看IPS对象

    IPCS命令是Linux下显示进程间通信设施状态的工具,可以查看共享内存、信号量、消息队列的状态。

    具体的用法总结如下:
   # ipcs -a                                       //显示所有的IPC设施
   # ipcs -q                                       //显示所有的消息队列
   # ipcs -s                                       //显示所有的信号量
   # ipcs -m                                     //显示所有的共享内存
   # ipcs -q<-m/-s> -i id                   //显示IPC设施的详细信息。其中,id 对应shmid、semid、msgid等
   # ipcs-q<-m/-s> -l                        //显示IPC设施的限制大小
   # ipcs <-m/-q/-s> -c                     //显示IPC设施的权限关系
   # ipcs <-m/-q> -p                        //显示最近访问过IPC设施的进程ID
   # ipcs <-m/-q/-s> -t                     //显示IPC设施的最后操作时间
   # ipcs -u                                     //显示IPC设施的当前状态

3. 删除IPS对象

    ipcrm命令用于移除一个消息对象,或共享内存段,或一个信号集,同时会将与ipc对象相关联的数据也一起移除。
    只有root用户,或IPC对象的创建者才能执行此操作。
    具体的用法总结如下:
    # ipcrm -M shmkey                //移除用shmkey创建的共享内存段。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。
    # ipcrm -m shmid                   //移除用shmid标识的共享内存段。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。
    # ipcrm -Q msgkey                //移除用msqkey创建的消息队列和数据结构
    # ipcrm -q msgid                   //移除用msgid标识的消息队列和数据结构
    # ipcrm -S semkey                //移除用semkey创建的信号和数据结构
    # ipcrm -s  semid                  //移除用semid标识的信号和数据结构

4. ftok函数

    System V中,主要存在下面3种IPC方式:
    System V消息队列,System V信号量,System V共享内存区。
    这三种类型的IPC都使用key_t值做为它们的名字。
    key_t这个数据类型定义在<sys/types.h>中,通常是一个至少32位整数。
    通常使用ftok()函数把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键。

    函数原型:

#include <sys/ipc.h>
/* Generates key for System V style IPC. */
key_t ftok (const char *pathname, int proj_id);   // 成功返回IPC键,失败返回-1;

    参数说明:
    pathname 通常是跟本应用有关的目录(必须存在并且能访问),proj_id指的是本应用所用到的IPC的一个序列号.

    函数说明:
    两进程如在pathname和proj_id上达成一致(约定好),双方就都能够通过调用ftok函数得到同一个IPC键。根据APUE(2rd), Item518所讲,ftok的实现是组合了三个值的:
    --pathname所在文件系统的信息(stat结构的st_dev成员)
    --pathname在本文件系统内的索引节点号(stat结构的st_ino成员)
    --id的低序8位(不能为0)
    具体如何组合的,根据系统实现而不同。例如:假设指定文件的索引节点号为65732,换算成16进制为0x0100C4,而指定的ID值为35,换算成16进制为0x23,则最后的key_t返回值为0x230100C4。

    注意事项:
    使用ftok()需要注意的问题:
    --pathname指定的目录(文件)必须真实存在且调用进程可访问,否则ftok返回-1;
    --pathname指定的目录(文件)不能在程序运行期间删除或创建。因为文件每次创建时由系统赋予的索引节点可能不一样。这样一来,通过同一个pathname与proj_id就不能保证生成同一个IPC键。

这篇关于进程间通信(1) - IPS概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/468122

相关文章

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

java 进程 返回值

实现 Callable 接口 与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 public class MyCallable implements Callable<Integer> {public Integer call() {return 123;}} public static void main(String[] args

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(