Как перенаправить AllocConsole + Stdout под Cygwin - PullRequest
2 голосов
/ 16 января 2012

У меня есть комплексное приложение >> cygwin << windows (он же подсистема windows), и я хочу добавить консоль отладки.Я уже попробовал следующие варианты, но ни один из них не работает для меня. </p>

Консоль отображается с измененным названием, но остается черным-черным, вывод не отображается.

Вариант 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 сломан, и для меня нет решения.

1 Ответ

1 голос
/ 17 января 2012

Да, это проблема Cygwin. Парни Cygwin на самом деле усердно работали, чтобы максимально симулировать среду "unix", поэтому обычные трюки W32 не могут работать. В любом случае вы можете написать свои сообщения на новой консоли с помощью функции WriteConsole, но я вижу, что это не то, что вам нужно. В прошлом у меня была похожая проблема, ad решал ее, создавая pipe (), перенаправляя его в stdout / stderr и создавая поток, который получал символы из конца канала, записывал их в новую консоль через WriteConsole. Нелегко.

Кроме того, я думаю, что управление консоли cygwin много раз менялось в разных версиях, так что, возможно, уловка, которая работает с одной версией, перестает работать с другой.

Это дикий мир ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...