日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux查看队列 msg,linux第10天 msg消息队列

發布時間:2025/3/8 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux查看队列 msg,linux第10天 msg消息队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

cat /proc/sys/kernel/msgmax最大消息長度限制

cat /proc/sys/kernel/msgmnb消息隊列總的字節數

cat /proc/sys/kernel/msgmni消息條目數

消息隊列綜合案例

//server

#include

#include

#include

#include

#include

#include

#include

#include

#define ERR_EXIT(m)

do

{

perror(m);

}

while(0);

struct msgbuf {

long mtype; /* message type, must be > 0 */

char mtext[1024]; /* message data */

};

int main()

{

struct msgbuf revbuf;

int key = 0;

int msgid = 0;

int ret = 0;

int pid= 0;

key = ftok("./", '2');

if (key < 0)

ERR_EXIT("ftok");

//獲取消息隊列

ret = msgget(key, 0666 | IPC_CREAT | IPC_EXCL);

if (ret < 0)

{

if (errno == EEXIST) //如果消息隊列已存在

msgid = msgget(key, 0666);

else

ERR_EXIT("msgget:");

}

else

msgid = ret;

//設置發送buf

memset(&revbuf, 0, sizeof(revbuf));

revbuf.mtype = 1; //接收方總是接收類型1

while (1)

{

ret = msgrcv(msgid, &revbuf, sizeof(revbuf.mtext), 1, 0);

if (ret < 0)

ERR_EXIT("msgrcv:");

fputs(revbuf.mtext + 4, stdout);

pid = *((int *)(revbuf.mtext));

revbuf.mtype = pid;

ret = msgsnd(msgid, &revbuf, ret, IPC_NOWAIT);

if (ret < 0)

ERR_EXIT("msgsnd");

}

return 0;

}

//clt

#include

#include

#include

#include

#include

#include

#include

#include

#define ERR_EXIT(m)

do

{

perror(m);

}

while(0);

struct msgbuf {

long mtype; /* message type, must be > 0 */

char mtext[1024]; /* message data */

};

int main()

{

struct msgbuf sndbuf;

struct msgbuf revbuf;

int key = 0;

int msgid = 0;

int ret = 0;

int pid= 0;

key = ftok("./", '2');

if (key < 0)

ERR_EXIT("ftok");

//獲取消息隊列

ret = msgget(key, 0666 | IPC_CREAT | IPC_EXCL);

if (ret < 0)

{

if (errno == EEXIST) //如果消息隊列已存在

msgid = msgget(key, 0666);

else

ERR_EXIT("msgget:");

}

else

msgid = ret;

//設置發送buf

memset(&sndbuf, 0, sizeof(sndbuf));

memset(&revbuf, 0, sizeof(revbuf));

pid = getpid(); //獲取pid作為包頭發出去

while (fgets(sndbuf.mtext + 4, sizeof(sndbuf.mtext), stdin) != NULL)

{

sndbuf.mtype = 1; //發送方總是發送類型1

memcpy(sndbuf.mtext, &pid, 4);

//*((int*)sndbuf.mtext) = pid; //這句話是指將sndbuf.mtext最前面四個字節指向一個int類型指針

ret = msgsnd(msgid, &sndbuf, strlen(sndbuf.mtext + 4) + 4, IPC_NOWAIT);

if (ret < 0)

ERR_EXIT("msgsnd");

sleep(1);

//讀取

ret = msgrcv(msgid, &revbuf, sizeof(revbuf.mtext), pid, IPC_NOWAIT);

if (ret < 0)

ERR_EXIT("msgrcv:");

fputs(revbuf.mtext + 4, stdout);

memset(&sndbuf, 0, sizeof(sndbuf));

memset(&revbuf, 0, sizeof(revbuf));

}

return 0;

}

總結

以上是生活随笔為你收集整理的linux查看队列 msg,linux第10天 msg消息队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。