Необработанный режим ввода на стандартный ввод в Cygwin/Mintty

Я хочу перевести мой стандартный ввод в режим необработанного ввода в Cygwin/Mintty. Как я могу это сделать? Прямо сейчас это буферизовано. С режимом необработанного ввода я имею в виду, что read возвращает каждый введенный символ

Я бы предпочел сделать это без каких-либо дополнительных зависимостей. Т.е. я думаю, что это возможно сделать, связавшись с некоторыми библиотеками из Cygwin, однако, если это возможно, я бы хотел этого избежать.

Некоторые результаты поиска: libuv, libuv win / tty.c, Cygwin tty.cc, Cygwin fhandler_tty.cc, Cygwin post (неблокирующий stdin), Mintty, Msysgit

Я пробовал через SetConsoleMode, но это работает только для консоли Windows, а не для Mintty. Т.е. этот код:

    // Setting terminal to raw mode...
    HANDLE hStdin;
    DWORD mode;
    //hStdin = GetStdHandle(STD_INPUT_HANDLE);
    hStdin = (HANDLE) _get_osfhandle(STDIN_FILENO);

    if (GetFileType(hStdin) == FILE_TYPE_CHAR) {
        cout << "stdin is file type char" << endl;
        GetConsoleMode(hStdin, &mode);
        if (
            !SetConsoleMode(
                hStdin,
                mode & ~(ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT))
        ) {
            cerr << "Cannot set stdin to raw mode" << endl;
            // ignore...
        }
    }

1 ответ

Есть ли system( "stty -raw" ); Работа?

Другие вопросы по тегам