Linux 进程间通讯详解五
生活随笔
收集整理的這篇文章主要介紹了
Linux 进程间通讯详解五
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
msgrcv函數(shù)
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
--功能:是從一個(gè)消息隊(duì)列接收消息
--參數(shù):msqid:由msgget函數(shù)返回的消息隊(duì)列標(biāo)識(shí)碼msgp:是一個(gè)指針,指針指向準(zhǔn)備接收的消息msgsz:是msgp指向的消息長(zhǎng)度,這個(gè)長(zhǎng)度不含保存消息類型的那個(gè)long int長(zhǎng)整型msgtype:它可以實(shí)現(xiàn)接收優(yōu)先級(jí)的簡(jiǎn)單形式msgflg:控制著隊(duì)列中沒(méi)有相應(yīng)類型的消息可供接收時(shí)將要發(fā)生的事
--成功返回實(shí)際放到接收緩沖區(qū)里的字符個(gè)數(shù)(不包含保存消息類型的那個(gè)long int 長(zhǎng)整型),失敗返回-1并且設(shè)置errno
--msgtype=0返回隊(duì)列第一條信息
--msgtype>0返回隊(duì)列第一條類型msgtype的消息
--msgtype<0返回隊(duì)列第一條類型小于等于msgtype絕對(duì)值得消息,并且是滿足條件的消息類型最小的消息
--msgflg=IPC_NOWAIT,隊(duì)列沒(méi)有可讀消息不等待,直接返回RNOMSG錯(cuò)誤,
--msgflg=0,隊(duì)列有可讀消息,直接讀取,沒(méi)有可讀消息,繼續(xù)等待,直到有消息過(guò)來(lái)再接收。
--msgflg=MSG_NOERROR,消息大小超過(guò)msgsz時(shí)被截?cái)?--msgtype>0且msgflg=MSG_EXCEPT,接收類型等于msgtype的第一條信息。 //消息隊(duì)列--msgrcv()函數(shù)
#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>//接收消息的結(jié)構(gòu)體
struct msgbuf
{long mtype; /* message type, must be > 0 */char mtext[1024]; /*這是占位符,由程序員自己決定發(fā)送消息的數(shù)組長(zhǎng)度 */
};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("訪問(wèn)消息隊(duì)列成功!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;
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhanggaofeng/p/6201907.html
總結(jié)
以上是生活随笔為你收集整理的Linux 进程间通讯详解五的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript 学习笔记-- ES
- 下一篇: CSS Grid layout布局