2009-01-28 57 views
3

我在單線程的過程中使用Linux的mount(2)函數。但是像CD-ROM這樣的設備設備的安裝可能需要一段時間(最糟糕的是我已經看到了40秒!),因爲它會思考一下,旋轉磁盤,然後纔會掛載文件系統。這可能會阻止該進程在相當長的時間內處理其他事件。Linux中的非阻塞安裝

我似乎無法找到以非阻塞方式安裝文件系統的方法。 有沒有辦法異步掛載文件系統沒有多線程或分叉?

瞭解動作是否完成對我來說不是問題,因爲我已經在同一個線程中讀取了內核uevents。

+0

任何特定的原因不叉叉? – Tanj 2009-01-28 02:32:33

+0

我是一名完美主義者,希望保持單線程使用盡可能少的資源。 :) – 2009-01-28 02:37:20

回答

12

否。如果不發射另一個線程或fork() ing,則必須等待mount()才能返回。

1

如果您想以單線程方式執行此操作,您可以手動執行mount命令並對其進行後臺處理,並使用select()或其他方法輪詢完成。然而,這與你的程序中的分叉和調用mount()沒什麼兩樣。另外值得注意的是,我經歷了mount()阻塞整個進程(和相關的線程),所以對於真正的異步行爲,分叉可能是要走的路。

2

你可以讓安裝過程在後臺運行。 insted的財產以後跑的一樣:

system("mount -a "); 

system("mount -a &"); 

這將讓mouning完全在後臺爲您服務。

但看了更近一點後,此解決方案不使用C接口,但系統接口