msgsnd()函数
来源:互联网 发布:linux nano 编辑:程序博客网 时间:2024/06/12 00:44
从函数名就可以看出,msgsnd()函数是用来向消息队列发送消息的。在linux/msg.h 它
的函数定义是这样的:
系统调用: msgsnd()
函数声明: int msgsnd ( int msqid, struct msgbuf *msgp, int msgsz, int msgflg )
返回值: 0 on success
-1 on error: errno = EAGAIN (queue is full, and IPC_NOWAIT was asserted)
EACCES (permission denied, no write permission)
EFAULT (msgp address isn't accessable – invalid)
EIDRM (The message queue has been removed)
EINTR (Received a signal while waiting to write)
EINVAL (Invalid message queue identifier, nonpositive
message type, or invalid message size)
ENOMEM (Not enough memory to copy message buffer)
传给msgsnd()函数的第一个参数msqid 是消息队列对象的标识符(由msgget()函数得
到),第二个参数msgp 指向要发送的消息所在的内存,第三个参数msgsz 是要发送信息的
长度(字节数),可以用以下的公式计算:
msgsz = sizeof(struct mymsgbuf) - sizeof(long);
第四个参数是控制函数行为的标志,可以取以下的值:
0,忽略标志位;
IPC_NOWAIT,如果消息队列已满,消息将不被写入队列,控制权返回调用函数的线
程。如果不指定这个参数,线程将被阻塞直到消息被可以被写入。
这里我们将创建一个封装函数来演示msgsnd()函数的使用:
int send_message( int qid, struct mymsgbuf *qbuf )
{
int result, length;
/* The length is essentially the size of the structure minus sizeof(mtype) */
length = sizeof(struct mymsgbuf) - sizeof(long);
if((result = msgsnd( qid, qbuf, length, 0)) == -1)
{
return(-1);
}
return(result);
}
的函数定义是这样的:
系统调用: msgsnd()
函数声明: int msgsnd ( int msqid, struct msgbuf *msgp, int msgsz, int msgflg )
返回值: 0 on success
-1 on error: errno = EAGAIN (queue is full, and IPC_NOWAIT was asserted)
EACCES (permission denied, no write permission)
EFAULT (msgp address isn't accessable – invalid)
EIDRM (The message queue has been removed)
EINTR (Received a signal while waiting to write)
EINVAL (Invalid message queue identifier, nonpositive
message type, or invalid message size)
ENOMEM (Not enough memory to copy message buffer)
传给msgsnd()函数的第一个参数msqid 是消息队列对象的标识符(由msgget()函数得
到),第二个参数msgp 指向要发送的消息所在的内存,第三个参数msgsz 是要发送信息的
长度(字节数),可以用以下的公式计算:
msgsz = sizeof(struct mymsgbuf) - sizeof(long);
第四个参数是控制函数行为的标志,可以取以下的值:
0,忽略标志位;
IPC_NOWAIT,如果消息队列已满,消息将不被写入队列,控制权返回调用函数的线
程。如果不指定这个参数,线程将被阻塞直到消息被可以被写入。
这里我们将创建一个封装函数来演示msgsnd()函数的使用:
int send_message( int qid, struct mymsgbuf *qbuf )
{
int result, length;
/* The length is essentially the size of the structure minus sizeof(mtype) */
length = sizeof(struct mymsgbuf) - sizeof(long);
if((result = msgsnd( qid, qbuf, length, 0)) == -1)
{
return(-1);
}
return(result);
}
- msgsnd()函数
- msgsnd()函数 msgrcv()函数
- msgsnd()函数 msgrcv()函数 .
- msgsnd()函数 msgrcv()函数
- msgsnd与msgrcv函数
- msgsnd/msgrcv函数祥解
- linux函数之msgrcv/msgsnd
- msgsnd()
- Linux系统调用--msgsnd/msgrcv函数详解
- Linux系统调用--msgsnd/msgrcv函数详解
- Linux系统调用--msgsnd/msgrcv函数详解
- Linux系统调用--msgsnd/msgrcv函数详解
- Linux系统调用--msgsnd/msgrcv函数简介
- 消息队列函数(msgget、msgctl、msgsnd、msgrcv)
- 消息队列函数(msgget、msgctl、msgsnd、msgrcv)
- 消息队列通信msgsnd函数时一直invalid argument
- (转)linux消息队列函数 msgget,msgsnd, msgrcv, ftok()
- 消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例
- 这段时间RP下降低了,看不懂啊。
- DP::Poj1050 To the max
- 内核中的原子上下文
- SQL NULL 值、SQL NULL 函数
- 我的空间中显示有20积分,为何下载时说没有积分呢?
- msgsnd()函数
- 排序小结1
- SQL 数据类型
- 《让Oracle跑得更快2—基于海量数据的数据库设计与优化》
- ASP.NET 中计算中英文混合字符串长度
- 分清函数指针和指针函数
- WinDBG教程
- msgrcv()函数
- SQL 函数