// freopen、控制台设备文件和控制台句柄句柄的正确使用.c
// 参考资料:
// https://learn.microsoft.com/zh-cn/windows/console/console-handles
// https://learn.microsoft.com/en-us/answers/questions/1319293/freopen-console-screen-buffer-info
#define _CRT_SECURE_NO_WARNINGS
#include <assert.h>
#include <stdio.h>
#include <Windows.h>
#define STR "Hello"
int main(void)
{
puts(STR);
freopen("std.txt", "w", stdout);
puts(STR);
freopen("conout$", "w+", stdout);
// 下面的实现全部是错误的,会导致获取 csbi 错误。
//freopen("conout$", "w", stdout);
//freopen("con", "w", stdout);
//freopen("con", "w+", stdout);
puts(STR);
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); // 输出句柄
CONSOLE_SCREEN_BUFFER_INFO csbi;
assert(GetConsoleScreenBufferInfo(hout, &csbi));
return 0;
}
freopen、控制台设备文件和控制台句柄句柄的正确使用
于 2023-06-29 09:11:33 首次发布