博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
System V IPC相关函数
阅读量:5361 次
发布时间:2019-06-15

本文共 2169 字,大约阅读时间需要 7 分钟。

System V IPC

将一个已保存的路径名和一个整数标识符转换成一个key_t值,称为IPC键

key_t:System V IPC(System V消息队列、System V信号量、System V共享内存区)将key_t作为
它们的名字

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

ipc_perm结构:

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

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

msgsnd()函数:

#include 
// 向标识符为msqid的消息队列放置一个消息// 成功返回0,失败返回-1int 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[1]; // 消息数据};

msgrcv()函数:

#include 
// 从标识符为msqid的消息队列读取一个消息// 成功返回读入数据字节数,出错返回-1ssize_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 
// 在一个消息队列上的各种控制操作// 成功返回0,出错返回-1int 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

 

转载于:https://www.cnblogs.com/lnlin/p/9697254.html

你可能感兴趣的文章
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Linux自己安装redis扩展
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
Spring mvc初学
查看>>
VTKMY 3.3 VS 2010 Configuration 配置
查看>>