管道通訊中如何實現對管道的互斥使用 父子程序的同步又是如何實

時間 2021-08-13 14:33:12

1樓:匿名使用者

我們迪哥的答案:

當程序要與其它程序通訊時,可利用msgsnd()系統呼叫來傳送訊息。對於msgsnd()系統呼叫,核心檢查訊息佇列描述符合許可權是否合法,訊息長度是否超過系統規定的長度。通過檢查後,核心為訊息分配訊息資料區,並將訊息從使用者訊息緩衝區拷貝到訊息資料區。

分配訊息首部,將它鏈入訊息佇列的末尾;在訊息首部中填寫訊息的型別、大小以及指向訊息資料區的指標等;還要修改訊息佇列頭標中的資料(如訊息佇列中的訊息數、位元組數等)。然後,喚醒等待訊息到來的睡眠程序。 訊息的接收:

程序可利用msgrcv()系統呼叫,從指定訊息佇列中讀一個訊息。對於msgrcv()系統呼叫,先由核心檢查訊息佇列識別符號合許可權,繼而根據使用者指定的訊息型別做相應的處理。訊息型別msgtyp的引數可能有三種情況:

當msgtyp=0時髦核心尋找訊息佇列中的第一個訊息,並將它返回給呼叫程序;當msgtyp為正整數時,核心返回指定型別的第一個訊息;當msgtyp為負整數時,核心應在其型別值小於或等於msgtyp絕對值的所有訊息中,選出型別值最低的第一個訊息返回。如果所返回訊息的大小等於或小於使用者的要求,核心便將訊息正文拷貝到使用者區,再從佇列中刪除該訊息,並喚醒睡眠的傳送程序;如果訊息長度比使用者要求的大,則系統返回出錯資訊。使用者也可以忽略對訊息大小的限制,此時,核心無需理會訊息的大小而一概把訊息內容拷貝到使用者區。

2樓:丶霖先生

湊個熱鬧、我也不知道。

匿名管道實現程序間通訊為何管道資料不能重複讀取

幸巴達 沒錯,讀了一次後,緩衝區就空了,在讀的時候就等在那裡知道緩衝區有新的內容。 因為緩衝區的資料已經被取走了,所以再次讀取的時候,緩衝區是空的 裡面無資料可讀 四念住 他是阻塞的同步函式啊.沒資料到達.自然要等待了.直到有資料來了.他才接收.並函式返回.執行後面的函式 萬里猛 只要輸入 愛,龍嘯...

如何理解通訊中的去調製的概念

去調製的根本意思就是解調,這個是和調製對應的工作過程。我們在通訊當中,傳輸的模擬訊號,比如語音,頻率都是幾百hz到幾百khz的,這種訊號的頻率較低。如果單純把這種訊號,使用手機或者廣播電臺傳送出去,那麼需要的天線就長達一百多公里。另外不同人的通話訊號也無法互相區分。所以為了避免這種情況,在通訊上,一...

知道水幫浦尺寸如何確定入口管道的大小?

一 根據以下情況確定管道的大小 當幫浦出口管道的直徑比幫浦嘴子大時,幫浦出口切斷閥的直徑至少比幫浦嘴子大一級。當需要降低幫浦進出口閥門的操作高度時,幫浦出口可選用異徑止回閥,入口可選用異徑過濾器,其直徑分別根據幫浦出入口嘴子和切斷閥的直徑確定。法蘭型異徑止回閥和過濾器的法蘭壓力等級及其密封面應與幫浦...