2017-10-16 60 views
0

我正在使用Linux,macOS和Windows上的Posix stat()函數,並且希望用不同的設備試用它,以查看結果。支持某些類型,例如套接字和FIFO在Windows上不存在,但我想檢查至少塊和字符設備。我發現AUX(和其他一些類似的)是字符設備,但是我找不到默認情況下在Windows上可用的任何塊設備。有人可以請示例嗎?Windows上的塊設備示例

+0

COM1(代表RS-232)是一個字符設備。 \\。\ X:表示dis X,它是一個塊設備。 –

回答

4

Windows不是POSIX操作系統,不支持stat。它有一個類似的功能,_stat,它試圖模擬的功能。然而,即使Windows確實有塊設備的概念,Windows實現中也沒有S_IFBLK(塊設備)標誌;但是,如果您在stat.h看,你會看到只有以下模式標誌的支持:

#define _S_IFMT 0xF000 // File type mask 
#define _S_IFDIR 0x4000 // Directory 
#define _S_IFCHR 0x2000 // Character special 
#define _S_IFIFO 0x1000 // Pipe 
#define _S_IFREG 0x8000 // Regular 
#define _S_IREAD 0x0100 // Read permission, owner 
#define _S_IWRITE 0x0080 // Write permission, owner 
#define _S_IEXEC 0x0040 // Execute/search permission, owner 

從這一點可以斷定,你所要求的是不可能的。

的確,_stat("C:")ENOENT而失敗,而_stat("\\\\.\\C:")EINVAL而失敗。

+0

是的,關於丟失標誌並因此不支持的設備的好處。從列表中我看到FIFOs(在Win:管道上)受到支持,但是。你可能有一個總是存在於系統中的管道的例子嗎? –

+0

當然,你可以使用'_stat(「\\\\。\\ pipe \\ eventlog」)統計事件日誌管道' – rustyx

+0

Windows上常見的'stat'實現僅限於文件系統。它們通過打開句柄並調用'GetFileInformationByHandle'或更新的'GetFileInformationByHandleEx'來實現,它最終通過'NtQueryVolumeInformationFile'(例如'FileFsVolumeInformation')和'NtQueryInformationFile'(例如'FileAllInformation')查詢文件系統信息。大多數非文件系統設備不支持查詢的信息類,所以'stat'將失敗。值得注意的是「\\。\ PIPE」(原生NT代碼中的「\ Device \ NamedPipe」)是一個基本的文件系統設備。 – eryksun

相關問題