【发布时间】:2016-12-17 21:58:13
【问题描述】:
考虑以下几点:
#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 流的属性?
【问题讨论】:
-
"这是推荐的方法" - 解决哪个问题的推荐方法?您从未解释过您要解决的问题。只是您提出的解决方案显然行不通。