考虑以下内容:
#include <cassert>
#include <cstdio>
#include <Windows.h>
#include <io.h>
int main(int /*argc*/, char* /*argv*/[]) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
//HANDLE handle = (HANDLE)_get_osfhandle(_fileno(stdout)); //or this; doesn't matter
BY_HANDLE_FILE_INFORMATION info;
BOOL okay = GetFileInformationByHandle(handle,&info);
assert(okay!=0);
return 0;
}
此程序中的断言失败,GetLastError()
报告文件句柄无效。这使得无法从info
提取属性。
但是,这是推荐的方法。例如(1),(2)。值得注意的是,如果它是物理背衬的FILE*
(例如使用fopen(...)
创建)的手柄,则它可以工作。
如何获得Windows上的std in/out/err流的属性?
属性(FILE_ATTRIBUTE_*
)仅适用于文件系统设备上的文件。当/OUT/OUT/ERR流未重定向到文件系统上的文件时 - 在这种情况下,没有任何属性。甚至管道都没有属性。因此,总的来说 - 您无法理解。属性下的意思是什么?