中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

如何在Linux環境下正確使用msgrcv接收消息

小樊
88
2024-09-07 09:24:44
欄目: 智能運維

msgrcv 是一個用于在 Linux 系統中接收消息隊列消息的系統調用

  1. 包含必要的頭文件:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
  1. 定義消息結構體:
struct msgbuf {
    long mtype;       // 消息類型
    char mtext[256];  // 消息內容
};
  1. 創建并獲取消息隊列ID:
key_t key = ftok("/tmp/msgfile", 65); // 使用ftok函數生成鍵值
if (key < 0) {
    perror("ftok");
    exit(1);
}

int msgid = msgget(key, 0666 | IPC_CREAT); // 使用msgget函數獲取消息隊列ID
if (msgid < 0) {
    perror("msgget");
    exit(2);
}
  1. 使用 msgrcv 接收消息:
struct msgbuf rcvbuffer;
long msgtype = 1; // 指定要接收的消息類型,這里接收類型為1的消息

ssize_t size = msgrcv(msgid, &rcvbuffer, sizeof(rcvbuffer.mtext), msgtype, 0);
if (size < 0) {
    perror("msgrcv");
    exit(3);
}
  1. 處理接收到的消息:
printf("Received message: type = %ld, text = %s\n", rcvbuffer.mtype, rcvbuffer.mtext);
  1. 刪除消息隊列(可選):
if (msgctl(msgid, IPC_RMID, NULL) < 0) {
    perror("msgctl");
    exit(4);
}
  1. 完整示例代碼:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>

struct msgbuf {
    long mtype;
    char mtext[256];
};

int main() {
    key_t key = ftok("/tmp/msgfile", 65);
    if (key < 0) {
        perror("ftok");
        exit(1);
    }

    int msgid = msgget(key, 0666 | IPC_CREAT);
    if (msgid < 0) {
        perror("msgget");
        exit(2);
    }

    struct msgbuf rcvbuffer;
    long msgtype = 1;

    ssize_t size = msgrcv(msgid, &rcvbuffer, sizeof(rcvbuffer.mtext), msgtype, 0);
    if (size < 0) {
        perror("msgrcv");
        exit(3);
    }

    printf("Received message: type = %ld, text = %s\n", rcvbuffer.mtype, rcvbuffer.mtext);

    if (msgctl(msgid, IPC_RMID, NULL) < 0) {
        perror("msgctl");
        exit(4);
    }

    return 0;
}

編譯并運行上述代碼,即可在 Linux 環境下正確使用 msgrcv 接收消息。注意,你需要先運行發送消息的程序,然后再運行接收消息的程序,以便在消息隊列中有消息可供接收。

0
仙游县| 边坝县| 宜兰县| 姜堰市| 句容市| 读书| 保靖县| 射阳县| 竹北市| 化州市| 兰考县| 南康市| 南溪县| 崇礼县| 孙吴县| 道真| 南陵县| 建始县| 宜川县| 衢州市| 新丰县| 米易县| 十堰市| 安岳县| 潞西市| 碌曲县| 绿春县| 武隆县| 瓦房店市| 岳阳县| 兰考县| 互助| 九台市| 张家口市| 关岭| 团风县| 方正县| 昆明市| 绥滨县| 长沙县| 视频|