2
比如,某人執行在終端執行以下操作:* nix:「echo'start working'> /etc/.example」:這是如何實現的?
echo 'start working' > /etc/.example
,這是執行時,示例程序將「開始工作。」
在UNIX(類)系統上,將如何實現類似的東西,以及這種行爲稱爲什麼?
比如,某人執行在終端執行以下操作:* nix:「echo'start working'> /etc/.example」:這是如何實現的?
echo 'start working' > /etc/.example
,這是執行時,示例程序將「開始工作。」
在UNIX(類)系統上,將如何實現類似的東西,以及這種行爲稱爲什麼?
有兩種一般的方法可以做到這一點。
其中之一是正在寫入的文件實際上是程序讀取的named pipe,並且它會從任何其他類型的輸入流(例如網絡套接字或標準輸入)。
另一個(特定於Linux)是正在寫入的文件是一個常規文件,程序正在使用inotify(或在舊系統上註冊)監視文件的更改。當它收到一個表明文件已經改變的inotify事件時,它將讀取它的內容並獲得「開始工作」字符串。
請注意,這兩種方法都要求相關程序已經在後臺運行(並且沒有做任何事情)。除非有例如後臺進程負責啓動正在執行上述兩件事之一的程序,否則真的沒有辦法以這種方式啓動程序。
謝謝!我早就知道FIFOs,但是我不能記得很多關於* nix IPC的知識;我不知道inotify。你描述的兩種方法有什麼區別? – Yktula 2010-04-09 01:57:39
主要區別在於FIFO(命名管道)是一個流,而inotify是一個文件系統接口。 Inotify會告訴你何時創建,修改,刪除和移動文件,以便程序可以做出適當的響應(例如,響應將一些文本寫入文件)。對於IPC來說,它不一定是*預期的,但肯定可以這樣使用。命名管道更傳統,像標準輸入描述符或網絡套接字一樣工作。你可以在它上面選擇(),如果你在沒有數據的時候嘗試讀取它,那麼這個呼叫將被阻塞直到有數據。 – 2010-04-09 02:37:03