210127階段三程序間通訊 訊息佇列

2021-10-17 21:02:53 字數 1204 閱讀 2321

2 程序間通訊

二、上課沒有聽懂或者沒有理解的地方

三、當天學習的收穫

三階段學:

系統程式設計 包括 程序、ipc(程序間通訊,如訊號、管道、訊息佇列、共享記憶體、訊號量)

網路程式設計 包括 socket:tcp/ip,

執行緒:多執行緒、執行緒池

opencv

linux 一切皆檔案,通過檔案描述符對檔案讀寫。 是作業系統操作檔案或裝置的指標

虛擬機器 橋接模式可以聯網 nat模式有虛擬網絡卡,只能用於同乙個環境之間的通訊

資料傳輸

共享資料

通知事件 一般用訊號

資源共享 多個程序共享同樣的資源, 需要核心提供鎖和同步機制

程序控制

早期unix程序間通訊、基於system x程序間通訊、基於socket程序間通訊、posix程序間通訊

unix程序間通訊方式包括:管道、fifo、訊號

system v程序間通訊方式包括system v訊息佇列、system v訊號燈、system v共享記憶體

posix程序間通訊方式包括posix訊息佇列、posix訊號燈、posix共享記憶體

2.2.1 訊息佇列

訊息佇列是訊息的鍊錶

每乙個訊息佇列都有乙個id,核心可以有兩個三個訊息佇列,訊息佇列存在核心中

核心:一片記憶體

命令 ipcs 檢視程序通訊

訊息可以接收指定型別的訊息,如10號訊息

傳送訊息的結構體,格式固定 字元陣列長度有最大限制

struct msg_buf ;

typedef struct msg_buf msg_t;

建立或開啟訊息佇列 key_t 是訊息佇列的key值 ipc_excl 檢測是否存在 存在則開啟失敗 不存在則建立成功

int msgget(key_t key,int msg***); 作用 用來建立和訪問乙個訊息佇列

傳送訊息 引數1 訊息佇列的id 引數2 結構體指標 引數3 大小 引數4 先為0

//msgsnd(msgid, &msg, sizeof(struct msgbuf), 0);

接收訊息

msgrcv(msgid, &msg, sizeof(struct msgbuf), 10, 0);

無多學了一種ipc的方法

210129階段三除錯 程序間通訊 共享記憶體

2 共享記憶體 二 上課沒有聽懂或者沒有理解的地方 三 當天學習的收穫 訊息佇列可以接收指定型別的訊息,而不全是根據訊息的先後 系統預設最大訊息佇列個數 16個 msgmni 可修改 msgmax 乙個訊息裡面訊息的內容最大不超過8198 msgmnb 乙個佇列總的訊息內容的長度 16384 訊息佇...

程序間通訊(三)

管道呼叫 我們已經了解了高層的popen函式,現在我們繼續來了解低層的pipe函式。這個函式提供了乙個在兩個函式之間傳遞資料的方法,而不必呼叫shell來解釋所請求的命令的。同時他也為我們提供了更多的資料讀寫控制。pipe函式的原型如下 include int pipe int file descr...

程序間通訊(三)

管道呼叫 我們已經了解了高層的popen函式,現在我們繼續來了解低層的pipe函式。這個函式提供了乙個在兩個函式之間傳遞資料的方法,而不必呼叫shell來解釋所請求的命令的。同時他也為我們提供了更多的資料讀寫控制。pipe函式的原型如下 include int pipe int file descr...