system v ipc的标识符ID
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的更多相关文章
- 《Unix网络编程》卷2 读书笔记 第3章- System V IPC
1. 概述 三种类型的System V IPC:System V 消息队列.System V 信号量.System V 共享内存区 System V IPC在访问它们的函数和内核为它们维护的信息上共享 ...
- System V IPC 之共享内存
IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 ...
- System V IPC 之信号量
本文继<System V IPC 之共享内存>之后接着介绍 System V IPC 的信号量编程.在开始正式的内容前让我们先概要的了解一下 Linux 中信号量的分类. 信号量的分类 在 ...
- System V IPC 之消息队列
消息队列和共享内存.信号量一样,同属 System V IPC 通信机制.消息队列是一系列连续排列的消息,保存在内核中,通过消息队列的引用标识符来访问.使用消息队列的好处是对每个消息指定了特定消息类型 ...
- 四十九、进程间通信——System V IPC 之消息队列
49.1 System V IPC 介绍 49.1.1 System V IPC 概述 UNIX 系统存在信号.管道和命名管道等基本进程间通讯机制 System V 引入了三种高级进程间通信机制 消息 ...
- System V IPC
1.概述 System V IPC共有三种类型:System V消息队列.System V 信号量.System V 共享内存区. System V IPC操作函数如下: 2.key_t键和ftok函 ...
- UNIX 进程间通讯(IPC)概念(Posix,System V IPC)
IPC(Inter-Process Communication,进程间通讯)可以有三种信息共享方式(随文件系统,随内核,随共享内存).(当然这里虽然说是进程间通讯,其实也是可以和线程相通的). 相对 ...
- System V IPC相关函数
System V IPC 将一个已保存的路径名和一个整数标识符转换成一个key_t值,称为IPC键key_t:System V IPC(System V消息队列.System V信号量.System ...
- Linux 系统编程 学习:04-进程间通信2:System V IPC(1)
Linux 系统编程 学习:04-进程间通信2:System V IPC(1) 背景 上一讲 进程间通信:Unix IPC-信号中,我们介绍了Unix IPC中有关信号的概念,以及如何使用. IPC的 ...
随机推荐
- LeetCode--443--压缩字符串(未看)
问题描述: 给定一组字符,使用原地算法将其压缩. 压缩后的长度必须始终小于或等于原数组长度. 数组的每个元素应该是长度为1 的字符(不是 int 整数类型). 在完成原地修改输入数组后,返回数组的新长 ...
- android-------Android Studio使用MAT分析工具遇到的错误
今天主要介绍一下我使用MAT工具分析文件时遇到的一个错误 Error opening heap dump 'a.hprof'. Check the error log for further deta ...
- Flex动画效果的用法--Resize
Flex动画效果的用法--Resize FlexAdobeXML <?xml version="1.0" encoding="utf-8"?> & ...
- 跨域和jsonp的原理
什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子: h ...
- 『TensorFlow × MXNet』SSD项目复现经验
『TensorFlow』SSD源码学习_其一:论文及开源项目文档介绍 『TensorFlow』SSD源码学习_其二:基于VGG的SSD网络前向架构 『TensorFlow』SSD源码学习_其三:锚框生 ...
- XXE漏洞
原理:XML外部实体注入,简称XXE漏洞,XML数据在传输中数据被修改,服务器执行被恶意插入的代码.当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取.系统命令执行.内网端口探测.攻击内网 ...
- loj#2353. 「NOI2007」 货币兑换 斜率优化
题意略 题解:可以列出dp方程\(dp[i]=max(dp[j]*{\frac{a[i]*c[j]+b[i]}{a[j]*c[j]+b[j]}}\),化简可以得到\(\frac{dp[i]}{b[i] ...
- pyqt5安装命令
第一步:安装qt5 pip install pyqt5==5.10.1 -i https://pypi.doubanio.com/simple pip install pyqt5-tools -i h ...
- python-项目流程分析及优化查询方法
项目流程分析: ****** 1. 需求分析 2. 知识点 - 插件 3. 功能分析: - 用户登录 - session - 签名cookie PS: 主动设置超时时间:request.session ...
- PAT 1008 Elevator
1008 Elevator (20 分) The highest building in our city has only one elevator. A request list is mad ...