Windows上标准输入/输出/错误的属性

时间:2016-12-17 21:58:13

标签: file winapi

请考虑以下事项:

#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中提取attributes

但是,这是推荐的方法。例如(1),(2)。值得注意的是,如果它是物理支持的FILE*(例如,使用fopen(...)创建)的句柄, 可以正常工作。

如何在Windows上获取std in / out / err流的属性?

1 个答案:

答案 0 :(得分:1)

属性(FILE_ATTRIBUTE_*)仅存在于FileSystem设备上的文件中。当in / out / err流没有重定向到FileSystem上的文件时 - 在这种情况下没有任何属性。甚至管道也没有属性。所以总的来说 - 你不能得到这个。你在属性下的意思是什么?