码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Posix与System V IPC


    Posix与System V IPC

    • 一、Posix IPC
    • 1.概述
      • 2.IPC名字
        • 3.px_ipc_name函数
          • 3.创建与打开IPC通道
            • 4.IPC权限
      • 二、System V IPC
    • 1.概述
      • 2.key_t键和ftok函数
        • 3.ipc_perm结构
          • 4.创建与打开IPC通道
            • 5.IPC权限
            • 6.标识符重用
            • 7.ipcs和ipcrm程序
            • 8.内核限制

    一、Posix IPC

    1.概述

    三种类型的IPC合称为"Posix IPC":

    1. Posix消息队列;

    2. Posix信号量;

    3. Posix共享内存区;

    在这里插入图片描述

    2.IPC名字

    三种类型的Posix IPC都使用"Posix IPC名字 ” 进行标识。mq_open、 sem_open和shm_open这三个函数的第一个参数就是这样的一 个名字,它可能是某个文件系统中的一 个真正的路径名,也可能不是。

    Posix.1描述Posix IPC名字的:

    1. 必须符合已有的路径名规则(必须最多由PATH_MAX个字节构成,包括结尾的空字节)。

    2. 若以斜杠符开头,那么对这些函数的不同调用将访问同 一 个队列。如果它不以斜杠符开头,那么效果取决于实现。

    3. 名字中额外的斜杠符的解释由实现定义。

    由于移植性问题不能都兼容到,应该把Posix IPC名字的#define行放在一个便于修改的头文件中,这样程序转移到另一个系统上,只需修改头文件。Posix.1定义了三个宏:

    S_TYPEISMQ(buf);
    S_TYPEISSEM(buf);
    S_TYPEISSHM(buf);
    
    1. 参数buf是指向某个stat结构的指针,其内容由fstat、lstat或stat这三个函数填入。
    2. 若所指定的lPC对象(消息队列、信号囊或共享内存区对象)是作为一种独特的文件类型实现的,而且参数所指向的stat结构访问这样的文件类型,那么这三个宏计算出 一 个非零值。否则,计算出的值为0。
    3. 项目3

    3.px_ipc_name函数

    自定义px_ipc_name函数解决移植性问题的方法,定位Posix IPC名字而添加上之前的前缀目录。

    char *px_ipc_name(const char *name);
    //name不能有任何斜杠符,例:
    px_ipc_name("test");
    

    函数原型:

    char * px_ipc_name(const char *name)
    {
       
    	char	*dir, *dst, *slash;
    
    	if ( (dst = malloc(PATH_MAX)) == NULL)
    		return(NULL);
    
    	//可以使用环境变量覆盖默认目录
    	if ( (dir = getenv("PX_IPC_NAME")) == NULL) {
       
    #ifdef	POSIX_IPC_PREFIX
    		dir = POSIX_IPC_PREFIX;		/* 来自“config.h”*/
    <
  • 相关阅读:
    计算机网络 | I/O模型、网络模型(OSI七层及TCP/IP四层)
    rust中使用sqlite 之 rusqlite使用
    吃透Chisel语言.37.Chisel实战之以FIFO为例(二)——基于FIFO的串口通信:串口发送“Hello World!”
    SpringCloud 配置中心(Nacos)的简单使用
    从 1.5 开始搭建一个微服务框架——日志追踪 traceId
    cocopods上传自动化
    20 个实例玩转 Java 8 Stream
    .NET周报 【4月第3期 2023-04-15】
    时间戳权限
    【XR806开发板试用】XR806简单使用GPIO命令通过继电器远程控制其它开发板
  • 原文地址:https://blog.csdn.net/weixin_50866517/article/details/127096564
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号