system v ipc对象是靠标识符ID来识别和操作的,具有系统唯一性.意思就是说,该ID是操作系统内的全局变量,只要具有权限,任何进程都可以通过标识符进行进程间的通信.
获取标识符ID的函数为int msgget(key_t key, int msgflg),其中参数key会被msgget函数转换为相应的IPC标识符.而key有三种选择方式:
1\随机获取一个整数的方式获取key.
2\使用IPC_PRIVATE,即msgget(IPC_PRIVATE, S_IRUSR|S_IWUSR),使用该方式总是会创建一个新的IPC对象,此方式一般适用于父子进程间的通信.父进程fork之前创建IPC对象,而后,子进程自然继承了IPC标识符,故父子进程可以进行通信.该方式在同一个进程中所产生的key每次都不一样,而且会出现在ipcs命令输出中<message queues>中.
3\使用ftok函数.其含义是将一个显式的文件名生成一个key,因此,只要知道该文件名,即可得到同一个key,那么多个进程通过key就可以实现通信.

实验代码

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h> #define FILEPATH "/tmp/mkfifo.0001" int main(int argc, char *argv[])
{
printf("-------+++++++++ftok+++++++++-------\n");
/* 0x1122可以理解为一个种子,但ftok只会用到其高8位的数值,其余的丢弃 */
/* 比如,同一个filepath,0x1122和0x2122所生成的key一样;而0x1122和0x1123生成的key则不一样 */
key_t mykey_1122 = ftok(FILEPATH, 0x1122);
key_t mykey_1123 = ftok(FILEPATH, 0x1123);
key_t mykey_2123 = ftok(FILEPATH, 0x2123);
if(mykey_1122 != -1 & mykey_1123 != -1 & mykey_2123 != -1)
{
printf("ftok succeed, filepath : %s\nmykey_1122 : %d\n", FILEPATH, mykey_1122);
printf("mykey_1123 : %d\n", mykey_1123);
printf("mykey_2123 : %d\n\n", mykey_2123);
}
else
printf("ftok failed, app exit!\n"); printf("-------+++++++++IPC_PRIVATE+++++++++-------\n");
key_t ipckey_1 = msgget(IPC_PRIVATE, S_IRUSR|S_IWUSR); /* S_IRUSR:用户读权限,S_IWUSR:用户写权限 */
key_t ipckey_2 = msgget(IPC_PRIVATE, S_IRUSR|S_IWUSR);
printf("IPC_PRIVATE key_1 : %d\n", ipckey_1);
printf("IPC_PRIVATE key_2 : %d\n", ipckey_2); return 0;
}

附注:

IPC对象的权限(类似于文件权限,也可8进制累加)
IPC对象的权限分为3类,分别是owner,group和other.其中
owner->S_IRUSR:0400, S_IWUSR:0200
group->S_IRGRP:0040, S_IWGRP:0020
other->S_IROTH:0004, S_IWOTH:0002
权限的组合既可以使用预定义的数值,也可以使用八进制数值累加.如msgget(key,IPC_CREAT|0600)等价于msgget(key,IPC_CREAT|S_IRUSR|S_IWUSR)

system v ipc的标识符ID的更多相关文章

  1. 《Unix网络编程》卷2 读书笔记 第3章- System V IPC

    1. 概述 三种类型的System V IPC:System V 消息队列.System V 信号量.System V 共享内存区 System V IPC在访问它们的函数和内核为它们维护的信息上共享 ...

  2. System V IPC 之共享内存

    IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 ...

  3. System V IPC 之信号量

    本文继<System V IPC 之共享内存>之后接着介绍 System V IPC 的信号量编程.在开始正式的内容前让我们先概要的了解一下 Linux 中信号量的分类. 信号量的分类 在 ...

  4. System V IPC 之消息队列

    消息队列和共享内存.信号量一样,同属 System V IPC 通信机制.消息队列是一系列连续排列的消息,保存在内核中,通过消息队列的引用标识符来访问.使用消息队列的好处是对每个消息指定了特定消息类型 ...

  5. 四十九、进程间通信——System V IPC 之消息队列

    49.1 System V IPC 介绍 49.1.1 System V IPC 概述 UNIX 系统存在信号.管道和命名管道等基本进程间通讯机制 System V 引入了三种高级进程间通信机制 消息 ...

  6. System V IPC

    1.概述 System V IPC共有三种类型:System V消息队列.System V 信号量.System V 共享内存区. System V IPC操作函数如下: 2.key_t键和ftok函 ...

  7. UNIX 进程间通讯(IPC)概念(Posix,System V IPC)

     IPC(Inter-Process Communication,进程间通讯)可以有三种信息共享方式(随文件系统,随内核,随共享内存).(当然这里虽然说是进程间通讯,其实也是可以和线程相通的). 相对 ...

  8. System V IPC相关函数

    System V IPC 将一个已保存的路径名和一个整数标识符转换成一个key_t值,称为IPC键key_t:System V IPC(System V消息队列.System V信号量.System ...

  9. Linux 系统编程 学习:04-进程间通信2:System V IPC(1)

    Linux 系统编程 学习:04-进程间通信2:System V IPC(1) 背景 上一讲 进程间通信:Unix IPC-信号中,我们介绍了Unix IPC中有关信号的概念,以及如何使用. IPC的 ...

随机推荐

  1. Spring Boot之实现自动配置

    GITHUB地址:https://github.com/zhangboqing/springboot-learning 一.Spring Boot自动配置原理 自动配置功能是由@SpringBootA ...

  2. LeetCode--349--两个数组的交集

    问题描述: 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4 ...

  3. manifest.xml微擎系统模块的安装文件内容

    微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库中相应记录,并执行manifest.xml里指定的脚本. manifest.xml文件内容详细介绍如下: manifest - ...

  4. 2.4 UML类图

    类图定义 类class的定义 具有相同属性.操作.方法.关系或者行为的一组对象的描述符 类是真实世界事物的抽象 问题领域的类:在对系统建模时,将会涉及到如何识别业务系统中的事物,这些事物构 成了整个业 ...

  5. Coprime Arrays CodeForces - 915G (数论水题)

    反演一下可以得到$b_i=\sum\limits_{d=1}^i{\mu(i)(\lfloor \frac{i}{d} \rfloor})^n$ 整除分块的话会T, 可以维护一个差分, 优化到$O(n ...

  6. Lowest Common Ancestor of a Binary Search Tree(Java 递归与非递归)

    题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ...

  7. 【Java】【5】List随机取值

    //shuffle 打乱顺序 Collections.shuffle(list); //随机抽取1个值 System.out.println(list.get(0)); //随机抽取N个值 Syste ...

  8. 【JS】【2】ajax传的参数为数组时,后台接收为null的处理

    前言: 1,参考博客:解决JavaScript中使用$.ajax方式提交数组参数 - Just_Do - 博客园(http://www.cnblogs.com/caoyc/p/5710702.html ...

  9. CRM WEB UI 02搜索跳转到详细界面

    结合上一个,在上一个中,创建的是选择链接字段EBELN. 下面来实现点击EBELN跳转到详细界面: 1.创建ZLYTEST03_H组件,做详细界面. 2.创建概览页 DETOV. 3.创建视图集 DE ...

  10. java调用url

    1 try { String str; URL u = new URL("https://www.baidu.com"); InputStream is = u.openStrea ...