System V IPC

将一个已保存的路径名和一个整数标识符转换成一个key_t值,称为IPC键
key_t:System V IPC(System V消息队列、System V信号量、System V共享内存区)将key_t作为
它们的名字

#include <sys/ipc.h>

key_t ftok(const char *pathname, int id);

ipc_perm结构:

内核给每个IPC对象维护一个信息结构

#include <sys/ipc.h>

struct ipc_perm{
uid_t uid; // 属主ID
gid_t gid; // 属组ID
uid_t cuid; // 创建者ID
gid_t cgid; // 创建者组ID
mode_t mode; // 读写权限
ulong_t seq; // 序列号
key_t key; // IPC键
};
// ipc_perm中的可以值可以是ftok()函数的返回值,也可以是IPC_PRIVATE(创建一个唯一的IPC对象)

System V消息队列:

内核为每个消息队列维护的信息结构:

#include <sys/msg.h>

struct msqid_ds{
struct ipc_perm msg_perm; // 内核给每个IPC对象维护的一个信息结构
struct msg *msg_first; // 指向队列中的第一个消息的指针
struct msg *msg_last; // 指向队列中最后一个消息的指针
msglen_t msg_cbytes; // 此时的队列长度
msgqnum_t msg_qnum; // 此时队列中消息的数量
msglen_t msg_qbytes; // 队列允许的最大长度
pid_t msg_lspid; // 最近调用msgsnd()的PID
pid_t msg_lrpid; // 最近调用msgrcv()的PID
time_t msg_stime; // 最近调用msgsnd()的时间
time_t msg_rtime; // 最近调用msgrcv()的时间
time_t msg_ctime; // 最近调用msgctl()的时间
};

msgget()函数:

#include <sys/msg.h>

// 创建一个消息队列或访问一个已存在的消息队列
// 成功返回非负标识符,出错返回-1
int msgget(key_t key, int oflag);

msgsnd()函数:

#include <sys/msg.h>

// 向标识符为msqid的消息队列放置一个消息
// 成功返回0,失败返回-1
int msgsnd(int msqid, const void *ptr, size_t length, int flag);
// flag可以为0,也可以为IPC_NOWAIT(非阻塞模式)
// length是以字节为单位指定待发送消息的长度,mtext的长度(sizeof(struct msgbuf) - sizeof(long))
// ptr是一个结构指针,下面是此结构的模板,此结构可以自行定义
struct msgbuf{
long mtype; // 消息类型
char mtext[]; // 消息数据
};

msgrcv()函数:

#include <sys/msg.h>

// 从标识符为msqid的消息队列读取一个消息
// 成功返回读入数据字节数,出错返回-1
ssize_t msgrcv(int msqid, void *ptr, size_t length, long type, int flag);
// ptr结构指针,length为返回的最大数据量
// type=0(返回消息队列的第一个消息)
// type>0(返回类型值为type的第一个消息)
// type<0(返回类型值小于或等于type绝对值的消息中类型值最小的第一个消息)

msgctl()函数:

#include <sys/msg.h>

// 在一个消息队列上的各种控制操作
// 成功返回0,出错返回-1
int msgctl(int msqid, int cmd, struct msqid_ds *buff);
// cmd = IPC_RMID 从系统中删除由msqid指定的消息队列
// cmd = IPC_SET 为指定消息队列设置msqid_ds结构下的msg_perm.uid、msg_perm.gid、msg_perm.mode、msg_perm.qbytes

System V IPC相关函数的更多相关文章

  1. 第3章 System V IPC

    3.1 概述 System V IPC 包含:System V消息队列.System V信号量.System V共享内存. 3.2 key_t 键和 ftok函数 这三种类型的System V IPC ...

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

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

  3. 从并发处理谈PHP进程间通信(二)System V IPC

    .container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px } .conta ...

  4. System V IPC 之共享内存

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

  5. System V IPC 之信号量

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

  6. System V IPC 之消息队列

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

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

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

  8. system v ipc的标识符ID

    system v ipc对象是靠标识符ID来识别和操作的,具有系统唯一性.意思就是说,该ID是操作系统内的全局变量,只要具有权限,任何进程都可以通过标识符进行进程间的通信.获取标识符ID的函数为int ...

  9. System V IPC

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

随机推荐

  1. Exchange 2010 打补丁的顺序

    升级的顺序: 客户端访问服务器 ——> 集线器传输服务器 ——>统一消息服务器(如果有的话)——> 邮箱服务器 ——> 边缘服务器.

  2. JSP标签:jsp内置标签、jstl标签、自定义标签

     一.jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签    1 ...

  3. 【PL/SQL编程基础】

    [PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...

  4. NYOJ 745 蚂蚁的难题(二)

    蚂蚁的难题(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种 ...

  5. 【JavaScript 11—应用总结】:下拉菜单

    导读:在web页面的显示中,总是免不了下拉菜单的设置.怎样将菜单设置的更好玩一点呢?这次,就将实现一个下拉菜单的制作.当鼠标移入的时候,菜单显示,鼠标移走,菜单关闭. 一.实现分析 首先,制作一个下拉 ...

  6. LINQ-进行数据转换

    一.将多个输入联接到一个输出序列中 可以使用 LINQ 查询创建包含元素的输出序列,这些元素来自多个输入序列. 以下示例演示如何组合两个内存中数据结构,但相同的原则可应用于组合来自 XML 或 SQL ...

  7. 九度oj 题目1012:畅通工程

    题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路 ...

  8. pmm metrics 数据采集来源

    handler状态参数 mysql> show global status like '%handler%'; +----------------------------+----------- ...

  9. AWR报告中Parse CPU to Parse Elapsd%的理解

    AWR报告中Parse CPU to Parse Elapsd%的理解   原文自:http://dbua.iteye.com/blog/827243   Parse CPU to Parse Ela ...

  10. Mahout0.9安装与配置(完全分布式模式下运行)

    安装Mahout之前,一定要把hadoop装好,hadoop的安装方法可以参考我的前一篇随笔,我安装的是hadoop2.7.0,具体方法在此不做介绍. 1.首先下载相应版本的Mahout: axel ...