0
我的代碼有兩個問題。在C中製作fifo
第一個問題是,一旦我創建了一個fifo,我不知道如何在代碼中添加一個條件以便將來運行,如果fifo存在 - 那麼就不要創建它。試圖谷歌,「訪問」不起作用(它只是在那裏,並沒有繼續)。
我的第二個問題是,代碼卡在「打開(」MyFifo ...「行,即使這是我創建fifo後的第一次(意思是我剛創建了fifo,mkfifo成功了,並且我到達的open()線 - 這是卡在那裏)
//create new fifo
if(mkfifo("myFifo",0666)<0)
{
perror("fifo creation failed.");
exit(1);
}
//get fifo fd
if((fd=open("myFifo",O_RDONLY))==-1)
{
perror("failed opening fifo.");
exit(1);
}
任何想法,我做錯了
謝謝。另一個問題:從fifo讀取也阻止?我的意思是,如果我讀了一個空的fifo,我的過程將被阻止,直到有人寫信給它?我怎樣才能實現「當有人寫信給fifo時閱讀」? – Jjang 2013-05-12 20:57:17
FIFO上的'read'阻塞,直到另一個進程'寫'給它。參見[Beej的Unix IPC指南](http://beej.us/guide/bgipc/output/html/multipage/fifos.html)。 – andrewdotn 2013-05-12 21:04:21
'EACCESS'不是從'stat()'得到的唯一可能的錯誤;如果名稱是路徑名,並且其中一個組件是不存在的目錄或ELOOP,或者......您可以獲得ENOTDIR,但只需嘗試創建FIFO並不一定是不可行的,錯誤不是'EEXIST'。然後你知道這個名字存在;你只需要使用'stat()'來驗證它是否是一個FIFO('S_ISFIFO()')。 – 2013-05-12 22:03:21