【问题标题】:C++ CreateNamedPipe ERROR_PATH_NOT_FOUND (3)C++ CreateNamedPipe ERROR_PATH_NOT_FOUND (3)
【发布时间】:2017-12-09 18:28:19
【问题描述】:

我正在尝试在 vc++ 中创建命名管道。 我习惯了 C,我希望这个错误不仅仅与我不熟悉 C++ 有关。 我使用的代码如下:

#ifdef DEBUG
printf("%s\n%s\n", this->pipe_name, this->pipe_path);
#endif
this->pipe = CreateNamedPipe(
    this->pipe_path,
    PIPE_ACCESS_DUPLEX,
    PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT,
    1,
    this->pipe_buffer_size_kb * 1024,
    this->pipe_buffer_size_kb * 1024,
    NMPWAIT_USE_DEFAULT_WAIT,
    NULL);

if (this->pipe != INVALID_HANDLE_VALUE) // Setup successful
    return true;

if (GetLastError() != ERROR_PIPE_BUSY)  // Some unexpected error occured
{
#ifdef DEBUG
    printf("Failed to create named pipe: %d\n", GetLastError());
#endif
    return false;
}

pipe_buffer_size_kb 为 8

我得到的输出如下:

>.\run.exe
p0
\\.\rftb\p0
Failed to create named pipe: 3

作为 IDE,我使用 Microsoft Visual Studio Community 2017(产品详情:Microsoft Visual Basic 2017) 我使用了一个空的项目模板并添加了 DEBUG 和 _CRT_SECURE_NO_WARNINGS 作为预处理器定义。

感谢任何帮助。

【问题讨论】:

  • 阅读文档管道的名称可能不正确。阅读:msdn.microsoft.com/en-us/library/windows/desktop/…我阅读它的方式管道名称必须以\\.\pipe\ 开头
  • 它就是这样工作的。比你,我还以为是方案\\.\pipe_name\instance_name。但我不明白什么是实例。
  • 此代码需要改进。我返回了 INVALID_HANDLE_VALUE。
  • 我的字符串如下所示:\\\\.\\pipe\\pipe_com1 但我得到 INVALID_HANDLE_VALUE

标签: c++ visual-c++


【解决方案1】:

MSDN docs 状态:

唯一的管道名称。此字符串必须具有以下形式:

\\.\管道\管道名称

名称的管道名称部分可以包含除反斜杠以外的任何字符,包括数字和特殊字符。整个管道名称字符串最长可达 256 个字符。管道名称不区分大小写。

您的管道名称无效,因为它与该模式不匹配。

【讨论】:

    【解决方案2】:

    您的路径是 \\.\rftb\p0,但 Windows 中的所有命名管道都位于 \\.\pipe\ 下。将您的路径更改为例如\\.\pipe\p0,它可能会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      相关资源
      最近更新 更多