Windows上标准in/out/err的属性



考虑以下内容:

#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流未重定向到文件系统上的文件时 - 在这种情况下,没有任何属性。甚至管道都没有属性。因此,总的来说 - 您无法理解。属性下的意思是什么?

最新更新