2012-11-06 76 views
0

我試圖打開一個線程寫入的FIFO管道,同步都很好。 但是,出於可理解的原因,我需要它以追加模式打開。以追加模式打開管道

當我打開它如下:

 ret_val = mkfifo(lpipename.c_str(), 0666); 
     if((pipehandler = open(lpipename.c_str(), O_RDWR)) < 1) 
    { 
     perror("Failed to open pipe file"); 
     syslog(LOG_ERR, "Failed to open pipe file"); 
     exit(1); 
    } 

我沒有任何問題,我可以看到標記爲黃色的管道時「LS'-ING我的文件夾

但是當我嘗試以追加模式打開管道:

ret_val = mkfifo(lpipename.c_str(), 0666); 
    if((pipehandler = open(lpipename.c_str(), O_RDWR| O_APPEND)) < 1) 
    { 
     perror("Failed to open pipe file"); 
     syslog(LOG_ERR, "Failed to open pipe file"); 
     exit(1); 
    } 

我在文件夾中根本看不到管道。 爲了記錄,我在任何一個選項中都收到錯誤 有沒有人有任何想法?如果有多個進程將數據追加到一個文件在一次

感謝

+0

請注意,不是用perror顯式地打印到標準錯誤,你可以在大多數unixen中將'LOG_PERROR'添加到openlog()的選項標誌。 (你需要調用strerror()來得到與perror相同的文本。) –

回答

0

O_APPEND可能導致對NFS文件系統損壞的文件。這是因爲NFS不支持附加到文件,因此客戶端內核必須對其進行模擬,這在沒有競爭條件的情況下不能完成。

這可能是由於這一點,更多的細節看看下面的鏈接

http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html

+0

@ DILI ..只有一個線程寫入文件。 –

+0

由於它沒有給出任何錯誤,所以我猜想它可能是由於這一點。讓我做一些更密集的谷歌搜索,希望我會想出更有用的東西。 – Dili

+0

「我試圖打開一個fifo管道,其中多個線程寫入」。請確保一次只有一個進程寫入文件。 – Dili

0

這是一個FIFO。它怎麼能做任何事情,但附加?我相信追加是一種常態,因此無論你如何打開它,它總是會追加的。