我从进程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



09-12 05:16