2015-11-04 78 views
1

是否有一個函數庫阻塞調用方,直到某個文件存在和/或可刪除? (非常優選地在標準的C++庫或升壓。)如何等待文件存在(並被釋放)?

背景

我是一個C++新人編寫需要單線程應用到

  1. 執行上啓動了一些重的計算。
  2. 等待某個輸入文件存在(並且是可刪除的)。
  3. 如果文件包含某個指令,請將其刪除並退出。
  4. (否則)處理它,刪除它,併產生一個輸出文件。從第2步

原因

  • 重複用於具有步驟2,3和5(而不是隻步驟1 & 4和調用點播應用)是步驟1中涉及到一些重的處理。

    我不想在第2步中花費大量的處理器時間來忙等待,但我也不希望通過輪詢文件存在的頻率來引入不必要的延遲。

    這裏的正確方法是什麼? (最好跨平臺:Windows,Linux,OSX。)

  • +1

    只是爲了它的緣故:http://stackoverflow.com/questions/10164341/cross-platform-c-filesystem-watcher - 不提高或標準librar y(文件系統上沒有任何內容),但可能有用。 – Rostislav

    +0

    Re *等待某個輸入文件存在(並可刪除)*第一部分很簡單。嘗試打開文件。等一下,如果出現錯誤,請重試。括號內的部分非常簡單。這甚至意味着什麼,特別是在跨平臺的意義上? –

    回答

    2

    有一個短耳服務抽象了

    • 的Win32 API filemonitoring
    • inotify在Linux(和朋友嗎?)

    在網絡上四處傳播。它沒有被接受進入Boost然而,儘管有些討論是怎麼回事升壓短耳

    (用於異步IO庫)發現這一點,這可能會幫助你找到它,包括它:

    1

    它當然是操作系統(和文件系統)特定的。在Linux上,您可以使用inotify(7)設施(本機Linux 本地文件系統,如Ext4或BTRFS)。

    +0

    謝謝。我希望有一個圖書館能夠爲我提供OS和FS特定的摘要。我已經編輯了相應的問題。 – Museful

    +0

    爲什麼你會想象每個操作系統功能都可以用OS和FS中立的方式進行包裝? –

    +1

    我只是希望*這個*可以爲三個給定的平臺(假設「OS&FS中立」意味着OS&FS不變的API--如果我誤解了我,則糾正我。) – Museful