linux ipc消息的权限,linux IPC -msg 消息队列

1.进程通信的方式:消息队列、 共享内存段 、信号量、管道、SOCKET等。

2.linux 下IPCS命令的作用:报告进程间通信设施状态-

ipcs -q查看消息队列,-m查看内存,-s查看信号量 -a查看上述所有信息

3.消息队列:msg

3.1 消息队列创建:int msgget(key_t key,IPC_CREAT|IPC_EXCL|(权限));//成功返回消息队列标识值

key_t 为消息队列关联值 : IPC_PRIVATE

IPC_CREAT,如果队列存在则打开,不存在则创建。

IPC_EXCL本身没什么用,和IPC_CREAT一起使用时,如果队列存在则返回错误-1

函数调用成功,则返回 消息队列标识值,错误时,返回不同值,如,已存在但没有权限打开,没有内存,已达到系统最大消息值,不存在但没有使用IPC_CREAT...

3.2 写消息到消息队列中

int msgsnd(int msqid,void * ptr,size_t nbytes ,int flags); //成功返回0

msqid 消息队列标识,ptr 消息结构指针,nbytes 消息长度,flags :0表示忽略。

ptr 指针,指向的是一个可定义的消息缓冲区,用来存储要发送和接收的消息。定义如下:

struct msgbuf

{

long mtype;//消息类型 >0

char mtext[1];//消息文本

}

3.3 从消息队列中读消息

ssize msgrcv(int msqid,void * ptr,size_t nbytes,long type,int flags);//成功返回接收到的消息数据长度。

nbytes 要接收的数据长度(应该是msgbuf中定义的数组大小+1),如果接收到的数据长度比nbytes大,则按照flags进行处理:

flags:  IPC_NOWAIT 队列中没有要找到的消息时 出错返回。errno 为ENOMSG

o 函数阻塞

type :0 则从队列头中开始取消息 ,>0 则找到消息队列中消息类型为type在第一个取消息,<0 则返回消息类型小于等于type绝对值的最小值的第1条消息

3.4  操作消息队列 int msgctl(int msqid,int cmd,struct msqid_ds * buf);

buf 为cmd命令参数。

cmd: IPC_STAT 取消息队列中msqid_ds 数据

IPC_SET设置消息队列的msqid_ds 数据

IPC_RMID 删除消息队列

linux/msg.h 中定义,如下所示:

struct msqid_ds{

struct ipc_perm     msg_perm;

msgqnum_t   msg_qnum;

msglen_t    msg_qbytes;

pid_t       msg_lspid;

pid_t       msg_lrpid;

time_t      msg_stime;

time_t      msg_rtime;

time_t      msg_ctime;

...

...

};

--http://blog.csdn.net/renrenhappy/article/details/5862254

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值