我从进程A创建了一个超时很长的管道(//./pipe/mycoolpipe),
pipe = ::CreateNamedPipe(
name_.c_str(),
direction_,
PIPE_TYPE_BYTE | PIPE_WAIT,
1,
...,
...,
PIPE_TIMEOUT,
);
MS sysinternals pipelist.exe枚举了我的管道:
pipelist.exe | grep mycoolpipe
//./pipe/mycoolpipe
然后我要从进程B中读取文件属性:
::GetFileAttributesW(p.c_str()) // p == //./pipe/mycoolpipe
然后在调用GetFileAttributesW之后,管道不见了-什么?为什么?
注意:调试证明执行GetFileAttributesW会使管道消失-pipelist.exe在调用GetFileAttributesW之后不再枚举它。不涉及超时。
最佳答案
GetFileAttributesW()
对非文件系统对象具有未定义的行为,因此请不要这样做。
http://permalink.gmane.org/gmane.os.cygwin.patches/1973
https://cygwin.com/ml/cygwin-patches/2004-q2/msg00193.html