2009-02-06 97 views
6

這是我正在做的任務,不,我不是在找你,只是給我答案。我只需要有人來指出我正確的方向,也許有一兩行示例代碼。Linux&C:如何在多進程程序中設置文件讀取優先級?

我需要弄清楚如何從我的程序中設置文件讀取操作的優先級。給點意見:

  • 服務器進程接收消息,併產生一個子來處理它
  • 孩子試圖打開從消息中的文件名並開始加載文件內容到消息隊列
  • 有可能幾個孩子在同一時間運行,並初步消息包含一個優先級,這樣一些消息可能會得到更多的設備接入

我能想到做到這一點(目前,反正),唯一的辦法是增加計數器每次我創造一個信息,並做一些事情在計數器達到給定值後,像sched_yield那樣分配優先級。這很可能是一種可怕的,可怕的方法,但這是我現在能想到的。這個任務更多地是關於消息隊列,而不是其他任務,但是我們仍然需要具有數據傳輸優先級。

任何幫助/指導讚賞:)

回答

1

你確定你的任務是在談論文件,而不是系統V消息隊列?

閱讀的手冊頁:

msgctl(2), msgget(2), msgrcv(2), msgsnd(2), capabilities(7), 
    mq_overview(7), svipc(7) 

雖然我想你可以使用一個文件作爲鍵創建一個消息隊列,從而使多個進程有辦法通過消息隊列,Sys系統會合V消息隊列本身不是一個文件。

只是想知道,因爲你特別提到「消息隊列」,並談論「優先級」,這可能會映射到例如msgtyp字段。 msgsnd和msgrcv,儘管很難告訴你分配的是什麼信息。

+0

我已經有服務器接收來自多個客戶端的消息,所以msgget/snd/rcv和ftok對我來說不是問題。我面臨的挑戰是如何從我的消息中獲取優先級值,並根據消息離開每個服務器子級的速率或從磁盤讀取數據的速率 – David 2009-02-06 03:23:23

+0

...來執行。 – David 2009-02-06 03:24:11

2

直到最近,Linux中沒有IO優先級。現在有ionice。但我懷疑你是否打算在你的任務中使用它。

6

讓子進程池共享一個信號量。一旦孩子獲得信號量,它就可以從資源中讀取預定義的字節數並將其返回給客戶端。讀取的字節數可能與請求的優先級有關。一旦進程讀取了預定義的字節數,就釋放信號量。