2010-04-09 18 views

回答

6

有兩種一般的方法可以做到這一點。

其中之一是正在寫入的文件實際上是程序讀取的named pipe,並且它會從任何其他類型的輸入流(例如網絡套接字或標準輸入)。

另一個(特定於Linux)是正在寫入的文件是一個常規文件,程序正在使用inotify(或在舊系統上註冊)監視文件的更改。當它收到一個表明文件已經改變的inotify事件時,它將讀取它的內容並獲得「開始工作」字符串。

請注意,這兩種方法都要求相關程序已經在後臺運行(並且沒有做任何事情)。除非有例如後臺進程負責啓動正在執行上述兩件事之一的程序,否則真的沒有辦法以這種方式啓動程序。

+0

謝謝!我早就知道FIFOs,但是我不能記得很多關於* nix IPC的知識;我不知道inotify。你描述的兩種方法有什麼區別? – Yktula 2010-04-09 01:57:39

+1

主要區別在於FIFO(命名管道)是一個流,而inotify是一個文件系統接口。 Inotify會告訴你何時創建,修改,刪除和移動文件,以便程序可以做出適當的響應(例如,響應將一些文本寫入文件)。對於IPC來說,它不一定是*預期的,但肯定可以這樣使用。命名管道更傳統,像標準輸入描述符或網絡套接字一樣工作。你可以在它上面選擇(),如果你在沒有數據的時候嘗試讀取它,那麼這個呼叫將被阻塞直到有數據。 – 2010-04-09 02:37:03