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的 ...
随机推荐
- 20180518VSTO多簿单表汇总
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsof ...
- sgu
dp第几朵花放第几瓶 104 数论 能不能除3:105 106(ex_gcd引入t求范围交) 107(大数乘的FFT) 开空间技巧108 棋盘黑白格消除109(组合数学) java平方根 ...
- adobe
使用adobe acrobat pro dc可以处理pdf,自动识别,编辑pdf,将pdf导出为word.(收费可破解)
- 小程序授权demo
<button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo=" ...
- PHP单例模式 demo
<?php class single{ static public $db; private function __construct(){ }; static function getinst ...
- 百度基础架构组-实习生面试(2016.08 java后台开发)
一.项目 1.Spring MVC与Struts2的区别: 2.MVC三层是如何工作的?比如:要访问一个Url?a=xx&b=xx,怎么找到相应的资源,怎么运算,怎么返回等? 3.数据库myb ...
- Linux下查看相应端口的进程
1)查找被占用的端口:netstat -tln | grep 7777 2)查看被占用端口的PID:lsof -i:7777 3)禁用使用kill -9 PID来禁用端口进程
- [java]转:String Date Calendar之间的转换
String Date Calendar之间的转换 String Date Calendar 1.Calendar 转化 String Calendar calendat = Calendar.ge ...
- HttpClient4 警告: Invalid cookie header 的问题解决(转)
原文地址:HttpClient4 警告: Invalid cookie header 的问题解决 最近使用HttpClient4的时候出现如下警告信息 org.apache.http.client.p ...
- IntelliJ IDEA下载及安装,破解
IntelliJ IDEA下载及安装,破解 百度百科:IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助 ...