Skip to content
果冻虾仁 edited this page Aug 22, 2017 · 7 revisions

该函数用来对消息队列的基本属性进行控制、修改。

函数原型

#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgctl(int msqid, int cmd, struct msqid_ds *buf); 

参数

cmd字段除了公共的四个操作以外,还有自己独立的操作。

IPC_RMID

删除消息队列。从系统中删除给消息队列以及仍在该队列上的所有数据,这种删除立即生效。
仍在使用这一消息队列的其他进程在它们下一次试图对此队列进行操作时,将出错,并返回EIDRM。 此命令只能由如下两种进程执行:

  • 其有效用户ID等于msg_perm.cuid或msg_perm.guid的进程。
  • 另一种是具有超级用户特权的进程。

IPC_SET

设置消息队列的属性。按照buf指向的结构中的值,来设置此队列的msqid_id结构。
该命令的执行特权与上一个相同。

IPC_STAT

读取消息队列的属性。取得此队列的msqid_ds结构,并存放在buf*中。

IPC_INFO

读取消息队列基本情况。

Linux环境编程API

C语言API包含部分标准C的API、POSIX标准的系统编程API(一些Linux独有的系统API会单独注明)。

头文件源码

大部分头文件源码在/usr/include目录下。

安装man手册

因为涉及到大量的POSIX编程。所以最好下载POSIX函数的man手册。

Ubuntu

apt-get install manpages-posix apt-get install manpages-posix-dev 

默认安装了manpages-dev,所以不装POSIX的man手册是可以查看绝大部分API的。
但是不装的话,有些API是不能看到的,比如posix_spawn函数。

CentOS

yum install man-pages.noarch 

关于目录

左侧的目录并非以函数为索引依据,主要是以系统的man手册页面为索引依据。
比如exec里面包含6个函数、pipe里面包含pipe()和pipe2()两个函数,但是它们都是属于一个man页面中。

Clone this wiki locally