2017-06-20 43 views
0

我想運行C++應用程序,在Ubuntu下的Mac OS上完美工作。問題是由於打開命名管道失敗。我的C++程序無法打開命名管道

我用mkfifo如下:

pipe_name_ = std::string("/tmp/myfifo"); 
    if (mkfifo(pipe_name_.c_str(), 0666) < 0) { 
    error_print("Cannot create a named pipe\n"); 
    return -1; 
    } 

    if ((fd_ = open(pipe_name_.c_str(), O_RDONLY | O_CREAT, 0666)) < 0) { 
    error_print("Cannot open file description named %s %s\n", 
       pipe_name_.c_str(), strerror(errno)); 
    return -1; 
    } 

然而,這種打印到屏幕波紋管消息是open()

Cannot open file description named /tmp/myfifo Invalid argument

我的權限狀態爲波紋管:

$ls -la /tmp/myfifo 
prw-r----- 1 hamidb nonconf 0 Jun 20 13:35 /tmp/myfifo 
$umask 
0027 

我想知道爲什麼它在Mac OS上工作正常,而不是在Linux上。

+2

您正在使用C或C++?你同時說兩個.. – NathanOliver

+2

當'open'(或其他系統調用)失敗時,請檢查'errno'來查看錯誤是什麼。使用例如'strerror'獲取可打印的錯誤字符串。 –

+0

我正在使用C++來編譯 –

回答

3

我相信你有錯誤的標誌爲open,因爲你沒有創建文件。

應該

open(pipe_name_.c_str(), O_RDONLY) 
+0

這不是問題。 –

相關問題