Cygwin/Mintty で stdin を raw 入力モードにしたいです。それ、どうやったら出来るの?現在、ラインバッファリングされています。生の入力モードでは、入力read
されたすべての文字が返されることを意味します。
それ以上の依存関係なしでそれを行うことをお勧めします。つまり、Cygwin のいくつかのライブラリにリンクすることでおそらくこれを行うことができると思いますが、可能であれば、それを避けたいと思います。
一部の検索結果: libuv の問題、libuv win/tty.c、Cygwin tty.cc、Cygwin fhandler_tty.cc、Cygwin の投稿 (ノンブロッキング 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...
}
}