GBe*_*gen 6 windows winapi windows-services named-pipes
根据MSDN,
[管道名称]必须具有以下形式:
\\.\pipe\pipename名称的pipename部分可以包括反斜杠以外的任何字符,包括数字和特殊字符.整个管道名称字符串最长可达256个字符.管道名称不区分大小写.
但是有很多例子我在其中看到了带有反斜杠的命名管道名称.例如,SQL Server的标准管道名称是\\.\pipe\sql\query.
从SysInternals运行PipeList会在我的机器上显示大量管道,其名称包含反斜杠.
那么,管道名称中是否有反斜杠?
我问,因为我正在创建一个具有多个管道的服务,其名称如下:
\\.\pipe\MyApp
\\.\pipe\MyApp\0
\\.\pipe\MyApp\1
\\.\pipe\MyApp\2
Run Code Online (Sandbox Code Playgroud)
创建第一个管道后,创建其他管道将失败并出现Windows错误123(ERROR_INVALID_NAME).如果我跳过创建第一个管道,所有其他的,名称中使用反斜杠字符,将会正常工作.
管道似乎是分层的,就像文件系统一样,如果你有一个具有特定名称的管道,那么该名称就不能再用作其他管道的"文件夹"或容器.
当试图解决这个问题时,我遇到了MSDN文章,现在正在质疑我是否应该使用反斜杠.
有什么建议?
虽然这似乎是无证件行为,但它至少是一致的.只是不要创建一个与'文件夹'同名的管道.Windows在内部将命名管道实现为文件系统.但是请记住,恶意应用程序可能会创建\.\ pipe\MyApp管道并导致您的应用程序失败.考虑到使用反斜杠的唯一好处是纯语义,我建议使用下划线或其他字符.
| 归档时间: |
|
| 查看次数: |
1588 次 |
| 最近记录: |