2017-06-20 143 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

这不是问题。 –

相关问题