System V IPC相关函数
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相关函数的更多相关文章
- 第3章 System V IPC
3.1 概述 System V IPC 包含:System V消息队列.System V信号量.System V共享内存. 3.2 key_t 键和 ftok函数 这三种类型的System V IPC ...
- 《Unix网络编程》卷2 读书笔记 第3章- System V IPC
1. 概述 三种类型的System V IPC:System V 消息队列.System V 信号量.System V 共享内存区 System V IPC在访问它们的函数和内核为它们维护的信息上共享 ...
- 从并发处理谈PHP进程间通信(二)System V IPC
.container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px } .conta ...
- 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的标识符ID
system v ipc对象是靠标识符ID来识别和操作的,具有系统唯一性.意思就是说,该ID是操作系统内的全局变量,只要具有权限,任何进程都可以通过标识符进行进程间的通信.获取标识符ID的函数为int ...
- System V IPC
1.概述 System V IPC共有三种类型:System V消息队列.System V 信号量.System V 共享内存区. System V IPC操作函数如下: 2.key_t键和ftok函 ...
随机推荐
- angular-websocket.js 使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MHA 高可用集群搭建(二)
MHA 高可用集群搭建安装scp远程控制http://www.cnblogs.com/kevingrace/p/5662839.html yum install openssh-clients mys ...
- BZOJ 3669 [Noi2014]魔法森林 ——SPFA / Link-Cut Tree
[题目分析] 大意就是有一张图,边权有两个值,ai和bi 找到一条路径,使得路径上的max(ai)+max(bi)最小. 遇到有两个权值或者多个权值的时候,如果他们互相影响,试着用分块搞一搞. 如果互 ...
- P1736 创意吃鱼法 (动态规划)
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- 【SDOI2018】战略游戏(同时普及虚树)
先看一道虚树普及题:给你一棵 $n$ 个点的树,$m$ 次询问,每次询问给你 $k$ 个关键点,求把这些点都连起来的路径并的最短长度.$1\le n,m\le 100000,\space 1\le \ ...
- 【bzoj2238】Mst(树链剖分+线段树)
2238: Mst Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 465 Solved: 131[Submit][Status][Discuss] ...
- Annual Congress of MUD
Annual Congress of MUD 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Multiuser dungeon games, also called MUD games ...
- 最短路中部分点只能从中任意选取K个问题
题意:给N个点,还有另外m个点(其中只能选K个),求最短路. 思路:在SPFA的基础上,用一个数组来统计,在某点入队时(要拓展其他点了),若该点是m个点中的,则count[i]=原来的+1:若不是,则 ...
- CCPC-Wannafly Winter Camp Day1 (Div2, online mirror) A,B,C,E,F,I,J
https://www.zhixincode.com/contest/7/problems A题 分类讨论 当B有点需要经过时 穿梭的花费肯定为2*k,也可以发现,我们要找到包含所有需要经过的点(不含 ...
- T3186 队列练习2 codevs
http://codevs.cn/problem/3186/ 题目描述 Description (此题与队列练习1相比改了2处:1加强了数据 2不保证队空时不会出队)给定一个队列(初始为空),只有两种 ...