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. English trip M1 - PC7 Can I Borrow Your Ping-Pong? Teacher:Patrick

    In this lesson you will learn to desribe abilities.  这节课你将学习到描述你的能力 课上内容(Lesson) 三种常见情态动词 can aux. 能 ...

  2. p1218 Superprime Rib

    深搜,添加数字后如果仍为质数,继续递归. #include <iostream> #include <cstdio> #include <cmath> #inclu ...

  3. PHP工厂模式的使用场景,使用方法

    所谓工厂模式和生产有关.生产什么呢?生产出来的是一个实例对象.通过什么设备生产?通过一个工厂类生产simpleFactoty.怎么生产呢?工厂类调用自身静态方法来生产对象实例static functi ...

  4. 笔记react router 4(四)

    看完Router的变化,接着来说<Switch>组件. 在3.X中,你可以指定很多子路由,但是只有第一个匹配的路径才会被渲染. 就像这样, <Route path='/' compo ...

  5. PyCharm + PyQt4 环境搭建

    一.准备工作 下载pycharm 和 pyqt4 (百度下就有) pyqt4安装好后,在C:\Python27\Lib\site-packages\PyQt4 路径下会有designer.exe ,这 ...

  6. Highcharts 配置选项详细说明

    Highcharts 配置选项详细说明 Highcharts 提供大量的配置选项参数,您可以轻松定制符合用户要求的图表,本章节为大家详细介绍Highcharts 配置选项使用说明: 参数配置(属性+事 ...

  7. Hadoop--单点故障修复

    nameNode单点故障修复 1.启动虚拟机,启动集群  此时我们将主机hadoop1关机(断掉主机),开始抢救: 1.使用 秘书(secondaryNameNode),成功率不是100%  (这里我 ...

  8. 【九校联考-24凉心模拟】锻造(forging)

    题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打, 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现……自 己连一个史莱姆都打不过了. 勇者的精灵路由器告诉勇者其实是他 ...

  9. MySQL自带功能介绍

    前言: 数据库相关的操作 1.SQL语句 *****(MySql(一)已经介绍): 2.利用mysql内部提供的功能(视图.触发器.函数.存储过程: 一.视图: 把经常使用的查询结果,做成临时视图表, ...

  10. (Nginx反向代理+NFS共享网页根目录)自动部署及可用性检测

    1.nginx反向代理安装配置 #!/usr/bin/bash if [ -e /etc/nginx/nginx.conf ] then echo 'Already installed' exit e ...