Open secDre4mer opened 4 years ago
CC @alexbrainman
cc @iWdGo @mattn
When calling os.Stat(\\.\pipe\somepipe
), fileStat is returned from result of GetFileAttributesEx
So the filetype field that is used by FileInfo.Mode()
always become 0. To get filetype, it should call GetFileInformationByHandle, but that named pipe can not be called CreateFile since the pipe is not connected yet by ConnectNamedPipe. CreateFile retrurn ERROR_PIPE_BUSY until ConnectNamedPipe is called.
Most easy way to detect that the path is pipe is checking the path start with \.\pipe. but this is ugly.
Same as @mattn . I do not know how to determine if opened file is named pipe or not.
Alex
Change https://golang.org/cl/373354 mentions this issue: os: set file mode for pipes on windows
(CC @golang/windows)
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
yes
What operating system and processor architecture are you using (
go env
)?go env
OutputThe underlying OS is Windows 10, version 2004.
What did you do?
I ran os.Stat, passing an existing pipe as an example. Source code for this can be found at https://play.golang.org/p/a1O5axVpLOO In this example, the Pipe is created in the Golang program, but the issue is also reproducible when using a different, existing pipe.
What did you expect to see?
The FileInfo should have ModeNamedPipe set.
What did you see instead?
The FileInfo had no ModeNamedPipe set and was listed as a regular file. Output from the example code: