c - 如何在cygwin下AllocConsole + Stdout重定向

标签 c console cygwin redirect stdout

我有一个复杂的 >>cygwin<< Windows 应用程序(又名子系统窗口),我想添加一个调试控制台。我已经尝试了以下变体,但都不适合我。

控制台出现并更改了标题,但仍然是死黑的,没有显示输出。

变体 1)

ok = AllocConsole();
if (ok) {
    h = GetStdHandle(STD_OUTPUT_HANDLE);
    fd = _open_osfhandle((intptr_t)h, O_TEXT);
    fp = _fdopen( fd, "w" );
    *stdout = *fp;
    setvbuf( stdout, NULL, _IONBF, 0 );
    fprintf(stdout, "Hello worldd\n");
    SetConsoleTitle("VM Debug");
}

变体 2)

freopen("conout$","w",stdout);
fprintf(...

变体 3)

freopen("/dev/conout","w",stdout);
fprintf(...

这个问题可能已经回答了很多次,但没有一个解决方案对我有用。

谁能帮帮我?

但请记住:这一定是一个 cygwin 问题,我需要一个 cywin 解决方案,因为我知道一个或另一个变体在 MSVC 或 BorlandC 下工作。 任何答案都有帮助,甚至有人说 cygwin 坏了,我没有解决方案。

最佳答案

是的,这是一个cygwin问题。 Cygwin 的家伙们其实已经很努力地尽可能地模拟一个“unix”环境,所以常见的 W32 技巧是行不通的。您无论如何都可以使用 WriteConsole 函数在新控制台上写入消息,但我发现这不是您想要的。过去我遇到过类似的问题,解决方法是创建一个 pipe(),将其重定向到 stdout/stderr,然后创建一个从管道端接收字符的线程,通过 WriteConsole 将它们写入新的控制台。不容易。

此外,我认为 cygwin 的控制台管理随着不同的版本发生了多次变化,因此可能似乎适用于一个版本的技巧在另一个版本上就不再适用了。

这是一个狂野的世界......

关于c - 如何在cygwin下AllocConsole + Stdout重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882089/

相关文章:

windows - Windows上Haskell中的Unicode控制台I/O

c - 为什么 cmake 在 Windows 上使用 cygwin 为 netcdf 提供 undefined reference ?

c - MPI_Isend 到随机目的地

c++ - 是否存在允许任意精度指数的 C/C++ 任意精度浮点库?

c++ - 将 GUI 工具包链接到 C++ 输入

cygwin - SIPP : ERROR OPENING TERMINAL: CYGWIN

c - 在 Netbeans 中使用 C 打印笑脸

c - PIC16F18855 ADC 寄存器的行为不符合我的预期(C、CCS 编译器)

c - C 代码的 Visual Studio 2010 Intellisense 曲线

javascript - C# 意外符号 }