我的C++程序无法打开命名管道

My C++ program cannot open named pipe

本文关键字:管道 C++ 程序 我的      更新时间:2023-10-16

我正在尝试运行C++在Ubuntu下的Mac OS上完美运行的应用程序。该问题是由于打开命名管道失败造成的。

我按如下方式使用了mkfifo

  pipe_name_ = std::string("/tmp/myfifo");
  if (mkfifo(pipe_name_.c_str(), 0666) < 0) {
     error_print("Cannot create a named pipen");
     return -1;
  }
  if ((fd_ = open(pipe_name_.c_str(), O_RDONLY | O_CREAT, 0666)) < 0) {
     error_print("Cannot open file description named %s %sn",
                 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上运行良好。

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

它应该是

open(pipe_name_.c_str(), O_RDONLY)