msgctl 子例程
用途
提供消息控制操作。
库
标准 C 库 (libc.a)
语法
#include <sys/msg.h>
int msgctl (MessageQueueID,Command,Buffer)
int MessageQueueID, Command;
struct msqid_ds * Buffer;
int msgctl (MessageQueueID,Command,Buffer)
int MessageQueueID, Command;
struct msqid_ds * Buffer;
描述
msgctl 子例程提供各种消息控制操作,这些操作由 Command 参数指定,并存储在 Buffer 参数指向的结构中。 msqid_ds 结构在 sys/msg.h 文件中定义。
以下限制适用于消息队列:
- 最大消息大小为 4 兆字节。
- 每个队列的最大消息数为 524288。
- 最大消息队列标识数为 1048576。
- 队列中的最大字节数为 4 兆字节。
参数
| 项 | 描述 |
|---|---|
| MessageQueueID | 指定消息队列标识。 |
| 命令 | Command 参数的以下值可用:
|
| 缓冲区 | 指向 msqid_ds 结构。 |
返回值
成功完成后, msgctl 子例程返回值 0。 否则,返回值为-1,并设置errno全局变量来指示错误。
错误代码
如果下列任何条件成立,那么 msgctl 子例程不成功:
| 项 | 描述 |
|---|---|
| EINVAL | 命令或MessageQueueID参数无效。 |
| EACCES | Command 参数等于 IPC_STAT 值,调用进程被拒绝读许可权。 |
| EPERM | Command 参数等于 IPC_RMID 值,并且调用进程的有效用户标识没有 root 用户权限。 或者, Command 参数等于 IPC_SET 值,并且调用进程的有效用户标识不等于msg_perm.uid字段或msg_perm.cuidMessageQueueID。 |
| EPERM | Command 参数等于 IPC_SET 值,已尝试增大msg_qbytes字段,调用进程的有效用户标识不具有 root 用户权限。 |
| Efault | Buffer 参数点在进程地址空间之外。 |