我正在尝试运行在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操作系统而不是linux上运行良好。

最佳答案

我相信您有错误的open标志,因为您没有创建文件。
应该是

open(pipe_name_.c_str(), O_RDONLY)

关于c++ - 我的C++程序无法打开命名管道,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44659690/

10-16 11:19