linux訊息佇列的有趣的使用

2021-10-08 02:24:29 字數 1358 閱讀 2695

在之前學習pyhton的時候老師提出了個乙個問題,寫乙個購物車,要求你的金幣數量在這一次購物後存在記錄,就是說本來你的金幣有1000,買了東西後剩800,下次開啟程式再執行時,你的金幣應該是800。也不知道讀者明白沒有我講的,就是說程式執行第二次時候你的儲存數值傳送了改變並且得到了儲存。老師說解決斷電後程式重啟,仍然可以讀取到原來資料的辦法有兩種。

一,存到檔案中程式啟動就讀取檔案判斷是否有資料,沒有就往裡面存,有就讀取,並且忽略原來定義的固定值。

二,儲存到資料庫這個就不用多說了和存檔案類似。

可是我突發奇想如果不依賴檔案和資料庫,有沒有別的什麼辦法可以實現呢。就是寫純**來實現的。

因為上班的關係嘛,是用的linux,老闆也在專案中提到了這樣的問題,板子的處理很低階,甚至不是多執行緒處理,要求資料儲存不要占用空間,就是說沒有辦法建立檔案來儲存,最後我們想到的辦法是自己寫了乙個模擬佇列。

我想到的辦法是利用訊息佇列,我查了linux中程序間的通訊有 管道,訊號,訊號量,訊息佇列,套接字等等,只有乙個很特殊。

#include #include #include #include #include #include //構建乙個資料結構體就是需要儲存的資料

struct mymsg;

//id是用來獲取msgget得到的資訊

int id = 0;

//自己定義的輸入資料的陣列

char msg[512];

struct mymsg msgs;

//自定義的訊號響應函式,當輸入字元0時關閉管道。

void handler(int sig)

printf("msg queue distory ! sig is %d\n",sig);

return ;

}int main()

if(id==-1)

else

else}}

**很潦草,希望你不要介意。

第一次開啟程式並寫入資料到訊息佇列

第二次開啟程式輸入1只是為了讀出之前寫入的資料

輸入0關閉訊息佇列,訊息佇列在linux核心中是有限的當開啟太多而不關閉,或者是一直往裡面存入資料而不進行讀取,會出現異常錯誤。

Linux訊息佇列的使用演示

利用linux訊息佇列實現本地聊天室,練習所用,不喜勿噴!分別有兩位角色jack和rose,雙方互相通訊 jack.c include include include include include include include include define j2r 100 define r2j ...

linux訊息佇列 Linux訊息佇列

訊息佇列,unix的通訊機制之一,可以理解為是乙個存放訊息 資料 容器。將訊息寫入訊息佇列,然後再從訊息佇列中取訊息,一般來說是先進先出的順序。可以解決兩個程序的讀寫速度不同 處理資料速度不同 系統耦合等問題,而且訊息佇列裡的訊息哪怕程序崩潰了也不會消失。最簡單的訊息記憶體的使用流程 ftok函式生...

訊息佇列的使用

剛開始看的時候,由兩個疑問,我自己的答案是這樣的 1.訊息佇列在系統中的最大個數,關於這個問題,書上有明確的答案 書上有個 列明了linux free bsd,mac os x solaris中的典型值。當然也可以通過一些手段來修改。sysctl就可以修改。2.在多個執行緒 或程序 同時對乙個訊息佇...