ReadKey()
押す前にプログラムの実行をブロックする
ReadKey()
関数を覚えているでしょう。 この要件はUnixコンソールにも数回現れましたが、
getchar()
関数はEnterが押されるまで実行をブロックします。これは場合によってはあまり望ましくありません。
#include <stdio.h> #include <termios.h> #include <unistd.h> int main() { struct termios term; tcgetattr(STDIN_FILENO, &term); term.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, 0, &term); if (getchar()) { printf(«Hello world!»); } return 0; }
端末のパラメータを記述する
termios
構造のアプローチのすべての塩。
c_lflag
フィールド
c_lflag
、いわゆるローカルオプション、つまり 入力文字がドライバーによってどのように処理されるかについて。
この場合の敵は
ICANON
ビットです。これは、標準入力モードまたは非標準(生)入力モードの選択を担当します。
stdin
の標準モード
stdin
デフォルトで設定されており、特にラインバッファー、つまり
getchar()
をフィードするたびにEnterを押すという要件。 したがって、
stdin
を非
stdin
モードに移行する必要があります。
同じ
termios
フィールドの
ECHO
ビットは、入力エコー、つまりこの場合、画面上の入力文字の表示を担当します。 取り除いて/味に残します。