int msgget(key_t key, int mode);
创建消息队列,或者获取消息队列
xxxxxxxxxx
int msgsnd(int msgid, const void* msgp, size_t msgsz, int msgflg);
msgid 消息队列id
msgp 消息,通常为下面结构体
xxxxxxxxxx
struct msgbuf {
long mtype; //消息类型,必须>0
char mtext[100]; //消息数据,可以自定义大小
};
msgsz 消息长度,指消息数据的长度
msgflg —— IPC_NOWAIT(不阻塞),MSG_EXCEPT(接收不检测mtype),MSG_NOERROR(消息数据过长时会截断数据)
返回:0表示成功,-1失败
x
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtype,
int msgflg);
xxxxxxxxxx
/*************************************************************************
> File Name: msg.c
> Author:
> Mail:
> Created Time: Sat 29 Jan 2022 07:04:18 PM CST
************************************************************************/
typedef struct {
long mtype;
char mtext[MSG_MAX_TEXT];
} Msgbuf;
int main() {
//获取key值
key_t key = ftok("./msgTp", 233);
printf("key = 0x%x\n", key);
//创建消息队列
int msgid = msgget(key, IPC_CREAT | 0644);
if (msgid < 0) {
perror("msgget");
exit(1);
}
printf("msgid = %d\n", msgid);
Msgbuf msgbuf;
//接收消息
msgrcv(msgid, &msgbuf, MSG_MAX_TEXT, 1, 0);
printf("%s\n", msgbuf.mtext);
msgrcv(msgid, &msgbuf, MSG_MAX_TEXT, 2, 0);
printf("%s\n", msgbuf.mtext);
return 0;
}
xxxxxxxxxx
/*************************************************************************
> File Name: msg.c
> Author:
> Mail:
> Created Time: Sat 29 Jan 2022 07:04:18 PM CST
************************************************************************/
typedef struct {
long mtype;
char mtext[MSG_MAX_TEXT];
} Msgbuf;
int main() {
//获取key值
key_t key = ftok("./msgTp", 233);
printf("key = 0x%x\n", key);
//创建消息队列
int msgid = msgget(key, IPC_CREAT | 0644);
if (msgid < 0) {
perror("msgget");
exit(1);
}
printf("msgid = %d\n", msgid);
Msgbuf msgbuf;
msgbuf.mtype = 1;
strncpy(msgbuf.mtext, "hello boys", MSG_MAX_TEXT);
msgsnd(msgid, &msgbuf, MSG_MAX_TEXT, 0);
msgbuf.mtype = 2;
strncpy(msgbuf.mtext, "小明:onlike\n", MSG_MAX_TEXT);
msgsnd(msgid, &msgbuf, MSG_MAX_TEXT, 0);
return 0;
}