Linux IPC 之訊息佇列

2021-06-10 12:49:47 字數 1223 閱讀 7864

system v  or  posix ?

該使用哪個呢, 這是個問題 ...

相對而言,我更傾向於後者 posix mq

posix mq 的概況看這裡:man mq_overview

簡單的實現**:

#include #include #include #include #define my_mq_name "/my_test_mq"

#define msg_len 8192

struct my_msg

;int main(int argc, char ** argv)

//get attribute

mq_ret = mq_getattr(mqd, &attr);

if(mq_ret == -1)

printf("max #msgs=%ld, max #bytes/msg=%ld, current msg =%ld\n",\

attr.mq_maxmsg,attr.mq_msgsize,attr.mq_curmsgs);

//reveive msg

while(1)

usleep(32);

}mq_close(mqd);

return 0;

}

傳送訊息**:

int main(int argc, char **argv)

strcpy(ptr,"hello mqueue, i am who you do not know !");

mqd = mq_open(my_mq_name, o_wronly);

if(mqd == -1)

while(1)

usleep(2);

}return 0;

}

另外, linux 系統中posix mq 的大小限制檢視及設定命令:

# ulimit -q

當然也可以在程式中設定:

struct rlimit new_rlimit;

new_rlimit.rlim_cur = new_mq_mem_limit;

new_rlimit.rlim_max = new_mq_mem_limit;

if (setrlimit(rlimit_msgqueue, &new_rlimit) != 0)

參考:

linux IPC之訊息佇列

訊息佇列就是乙個訊息的鍊錶。可以把訊息看作乙個記錄,具有特定的格式以及特定的優先順序。對訊息佇列有寫許可權的程序可以向其中按照一定的規則新增新訊息 對訊息佇列有讀許可權的程序則可以從訊息佇列中讀走訊息。在linux系統中訊息佇列與鍵值一一對應。訊息佇列是通過鍊錶管理的,核心提供乙個struct ms...

Linux IPC 訊息佇列

systemv訊息佇列 為了便於程序之間通訊,我們可以使用管道通訊 systemv也提供了一些函式來實現程序的通訊.這就是訊息佇列.include int msgget key t key,int msg int msgsnd int msgid,struct msgbuf msgp,int msg...

linux IPC 訊息佇列 的核心限制

allocated queues 0 used headers 0 used space 0 bytes 對於 ipcs u 命令所顯示的ipc資源,如果要確定其限制,可以使用 ipcs l 命令 ipcs l shared memory limits max number of segments ...