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. luogu2216 [HAOI2007]理想的正方形

    先对于每一行中长度为 n 的列用单调队列搞出它们的最小/大值,再将这些长度为 n 的列想象成点再对行跑一遍 #include <iostream> #include <cstring ...

  2. Linux基础命令详解-1

    本篇详解的命令有以下30个 1.cd 功能:切换工作目录 参数列表     2.ls 功能:查看目录里的内容 参数列表     3.mv 功能:  移动或重命名文件和目录 参数列表     4.pwd ...

  3. Leetcode 335.路径交叉

    路径交叉 给定一个含有 n 个正数的数组 x.从点 (0,0) 开始,先向北移动 x[0] 米,然后向西移动 x[1] 米,向南移动 x[2] 米,向东移动 x[3] 米,持续移动.也就是说,每次移动 ...

  4. 【Luogu】P2422良好的感觉(单调栈)

    题目链接 写代码能力需要极大提升.我在五分钟之内想到了单调栈,然后花了一个小时的时间去看我单调队列为啥写错了…… 首先这题需要转换自己的思维.枚举所有“最小点”,然后看它往左往右最大能扩展多少. 维护 ...

  5. [luoguP2862] [USACO06JAN]把牛Corral the Cows(二分 + 乱搞)

    传送门 可以二分边长 然后另开两个数组,把x从小到大排序,把y从小到大排序 枚举x,可以得到正方形的长 枚举y,看看从这个y开始,往上能够到达多少个点,可以用类似队列来搞 其实发现算法的本质之后,x可 ...

  6. 【二叉搜索树】hdu 3791

    http://acm.hdu.edu.cn/showproblem.php?pid=3791 [注意] 是看树的形态是否一样,而不是中序遍历的结果 [Accepted] #include<ios ...

  7. JS控制背景音乐 没有界面

    建立一个HTML5页面,放置<audio>标签,设置音频文件源,设置循环播放.准备两张图片,分别表示开启和暂停背景音乐两种状态,可以点击. <audio id="music ...

  8. @Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码

    一.前言 这篇算是类加载器的实战第五篇,前面几篇在这里,后续会持续写这方面的一些东西. 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证) 还是Tomcat,关于类加载器的趣味实验 ...

  9. 洛谷 P1756 最小花费

    题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元 ...

  10. 【BZOJ3224】普通平衡树(splay)

    题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排 ...