2012-06-16 58 views
4

當我在Linux的某些任意位置回顯文件時,即echo > /tmp/file,某些正在運行的進程會響應。這個IPC是通過文件管道嗎?通過文件的進程間通信

這是否意味着一個正在運行的進程總是打開要讀取的文件?但是,如何編寫文件,因爲文件流被自己的進程鎖定了?

+0

一些正在運行的進程響應 - 哪些和如何?正在運行的進程總是打開文件 - 哪個文件?文件流被鎖定 - 誰說的? –

+0

我的意思是運行一般的進程。如果我打開一個文件,可能會被鎖定。例如,打開的文件不可能被更改,因爲其他一些進程正在使用它。普通計算機用戶如果試圖刪除文件或修改文件,他們會一直收到此消息。 – Amumu

回答

6

如果你想使用一個文件與另一個進程通信,你應該看看man fifo

我彙報這裏只是第一行:

NAME 
     fifo - first-in first-out special file, named pipe 

DESCRIPTION 
     A FIFO special file (a named pipe) is similar to a pipe, except that it 
     is accessed as part of the file system. It can be opened by multiple 
     processes for reading or writing. When processes are exchanging data 
     via the FIFO, the kernel passes all data internally without writing it 
     to the file system. Thus, the FIFO special file has no contents on the 
     file system; the file system entry merely serves as a reference point 
     so that processes can access the pipe using a name in the file system. 

我覺得這是你所需要的。

只是認爲它是一個緩衝區。必須打開閱讀和寫作的過程。正在讀取的進程將被阻塞,直到寫入進程沒有寫入。當寫入過程完成寫入時,關閉文件,這是讀取過程的綠燈開始清空緩衝區。這是一個FIFO,因此寫入的第一行將成爲第一行。然後寫入過程可以再次打開它們,然後重新開始。

您可以使用mkfifo創建一個FIFO。看看man mkfifo

+0

這意味着,該文件並不是一個真正的文件,但它只是一個管道(由某些進程擁有)在文件系統中可見?在較低層次上,這是否意味着文件只是一個內存塊的引用,當這塊內存有一些數據到達時,它將由擁有這塊內存的進程讀取。命名管道僅僅是爲了人類的互動,不是嗎? – Amumu

+0

添加了一個簡短的解釋。但是我沒有得到關於人機交互的部分......我們不是在談軟件嗎? :P – Zagorax

+0

嗯,我們得到了命名管道,我們可以手動寫入文件,即輸入'echo foo>/tmp/file',所以我認爲它包含人機交互。 – Amumu