Fifo

創建讀取時執行命令的命名管道/fifo

  • January 21, 2015

我正在尋找一個只從本地文件中讀取內容來自 http URL 的程序。該程序是一個守護程序,它被硬編碼以讀取其目前工作目錄中的特定文件,並在發生特定事件時讀取它。

我無法控制觸發文件讀取的事件,我想提供近乎實時的數據,而不是通過 curl 腳本不斷地將數據轉儲到文件中。

我認為可能有用的是一個在讀取時執行命令的fifo。然後將其連接到 netcat 或 curl 以檢索 URL 的內容(xml 數據)。這可能嗎?

在普通文件系統上從管道讀取程序是不可能的。但是還有其他方法可以滿足您的需求。

您可以循環執行內容生成程序。每次打開 FIFO 進行寫入時,都會阻塞,直到有讀取器出現。

while true; do
 generate-content >fifo
done

另一種方法是製作一個FUSE文件系統,它可以生成你喜歡的任何內容——返回給閱讀器的數據是由文件系統驅動程序生成的,它是一個普通的程序,所以你可以讓它做你喜歡的任何事情。不過,建構 FUSE 文件系統驅動程序需要做很多工作,所以除非你找到一個已經完全滿足你需要的驅動程序,否則這可能是矯枉過正。一些可能對您有所幫助的文件系統是:

  • ScriptFS — 從描述來看,這正是您需要的:“複製本地文件系統,但將所有檢測為’腳本’的文件替換為執行結果”。我從來沒有使用過它。
  • HTTPFS——讀取文件觸發網路下載;將它連接到 localhost 並執行一個小型網路伺服器,例如支持 CGI 或類似方法的lighttpdthttpd來提供動態內容。如果您需要的數據已經從網路伺服器下載,只需將 HTTPFS 指向它。

引用自:https://unix.stackexchange.com/questions/180372