Linux 进程间通讯详解五
生活随笔
收集整理的這篇文章主要介紹了
Linux 进程间通讯详解五
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
msgrcv函數
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
--功能:是從一個消息隊列接收消息
--參數:msqid:由msgget函數返回的消息隊列標識碼msgp:是一個指針,指針指向準備接收的消息msgsz:是msgp指向的消息長度,這個長度不含保存消息類型的那個long int長整型msgtype:它可以實現接收優先級的簡單形式msgflg:控制著隊列中沒有相應類型的消息可供接收時將要發生的事
--成功返回實際放到接收緩沖區里的字符個數(不包含保存消息類型的那個long int 長整型),失敗返回-1并且設置errno
--msgtype=0返回隊列第一條信息
--msgtype>0返回隊列第一條類型msgtype的消息
--msgtype<0返回隊列第一條類型小于等于msgtype絕對值得消息,并且是滿足條件的消息類型最小的消息
--msgflg=IPC_NOWAIT,隊列沒有可讀消息不等待,直接返回RNOMSG錯誤,
--msgflg=0,隊列有可讀消息,直接讀取,沒有可讀消息,繼續等待,直到有消息過來再接收。
--msgflg=MSG_NOERROR,消息大小超過msgsz時被截斷
--msgtype>0且msgflg=MSG_EXCEPT,接收類型等于msgtype的第一條信息。 //消息隊列--msgrcv()函數
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>//接收消息的結構體
struct msgbuf
{long mtype; /* message type, must be > 0 */char mtext[1024]; /*這是占位符,由程序員自己決定發送消息的數組長度 */
};int main(int arg, char * args[])
{int ret = 0;if (arg < 2){printf("please print one params !\n");return -1;}int type=atoi(args[1]);int msqid = msgget(0x1234, 0666);if (msqid == -1){perror("msgget() err");return -1;}printf("訪問消息隊列成功!msqid=%d\n", msqid);//接收消息struct msgbuf buf2;memset(&buf2, 0, sizeof(buf2));ret = msgrcv(msqid, &buf2, 1024, type, 0);if (ret == -1){perror("msgrcv() err");return -1;}printf("mtext=%s\n", buf2.mtext);return 0;
}
?
轉載于:https://www.cnblogs.com/zhanggaofeng/p/6201907.html
總結
以上是生活随笔為你收集整理的Linux 进程间通讯详解五的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript 学习笔记-- ES
- 下一篇: linux 如何对文件解压或打包压缩