设置了OPEN_EXISTING的Windows API-CreateFile()返回error_ALREADY_EXI
Windows API - CreateFile() with OPEN_EXISTING set returns error code of ERROR_ALREADY_EXISTS (183)
我正试图使用CreateFile()打开一个命名管道:
g_hPipe = CreateFile(szPipeName,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
其中szPipeName看起来像\\.\pipe\service_name
,并且返回INVALID_HANDLE_VALUE。
根据MSDN的说法,OPEN_EXISTING标志只在文件不存在的情况下返回错误,而GetLastError()
显示error_ALREADY_EXISTS(183)。我知道该文件存在,这就是我使用OPEN_EXISTING的原因。。。MSDN建议只有在设置了OPEN_ALWAYS或CREATE_ALLWAYS时才会发生这种情况。我在CreateFile()
之前立即调用SetLastError(0)
,以确保GetLastError()
的结果引用了CreateFile()
函数。
我已经搜索了很多,没有找到任何东西来说明我收到这个错误的原因。感谢您的帮助。
文档指示在单个客户端中只能CreateFile
一次,之后必须复制返回的句柄:
如果CreateFile打开命名管道的客户端,则函数使用处于侦听状态的命名管道的任何实例。这个打开过程可以根据需要多次复制把手,但在打开命名管道实例后另一个客户。
管道是点对点传输。如果你想让其他应用程序连接到你的服务器,它们将需要自己的管道实例,这意味着服务器上的另一个CreateNamedPipe调用。
相关文章:
- "error: no matching function for call to"构造函数错误
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- 返回的向量定义为 "std::vector<<error-type>, std::allocator<<error-type>>>
- 当流媒体关闭流程时,应将boost :: async_read返回的bost :: async_read返回的error
- WSARecv 有时会返回与 IOCP 端口关联的套接字的"invalid handle (error no 6)"。(C++)
- 返回"unknown error"的 SQLite 查询
- Winldap,Qt,ldap_search_ext_s在ldap_sasl_bind_s后返回"Operations Error"
- 启动 VirtualBoxSDK 测试应用程序返回错误"Error creating virtual box instance"
- cudaGetLastError 返回"unknown error"
- 使用 Select() 并返回"no error"错误
- 返回 2D 数组的 C++ "no matching function error"
- Google.Com 上的 http GET 请求返回"Error 302 page has been moved"
- QtPainter Error油漆设备返回引擎==0,类型3,油漆工未激活
- 为什么当设备上没有剩余空间时,error()返回EPERM -我希望是ENOSPC
- cocos2d-x 3.6 error:执行命令错误,返回码:1
- error()返回值的消息文本