2011-10-04 26 views
1

我創建了一個FIFO管如何創建一個linux fifo的「管道」(或其他),它不會阻止作者和讀者?

$ mkfifo pipename 

現在,如果我寫的財產以後進去,命令不會不歸,

$ echo "foo" > pipename 

,直到我讀它:

$ cat < pipename 
foo 

而且,讀命令也不會返回,直到有東西寫入它。現在

,我想創建一個這樣的事(實際上,也許這件事情不應該被視爲是一個管道,而是某種緩衝區),其

  • 讀命令將立即返回,不管還有一些是在管道或沒有(如果管道是空的,然後閱讀應與零個字節立即返回)
  • 寫命令立即返回

感謝

+0

這種行爲很難實現。最好要知道,爲什麼你關心數據寫入磁盤,以及你試圖用這個來實現什麼。可能會有更好的設計,它以不同的方式做你想做的事。 – LiKao

回答

1

使用fifo,但編寫自己的讀寫器。使用O_NONBLOCK設置打開FIFO,如果沒有其他進程打開另一個進程,則打開將立即返回。您的寫入命令將立即返回(按要求),但數據將丟失。如果您希望數據持久存在,請使用常規文件。

+0

謝謝。我希望數據一直持續到盒子啓動。普通文件將數據寫入磁盤,不是嗎?有沒有辦法在內存中實現相同的內容? – bpgergo

+1

是的,用常規文件將數據寫入磁盤。如果您需要某種緩衝,通常很難確保數據只存儲在內存中,而不是存儲在磁盤上(它可能會被換出)。如果您只關心寫入/讀取週期和速度,則可以使用虛擬磁盤(通常在所有分發版的某個目錄下可用)。 – LiKao

相關問題