Subject: How do I read characters ... without requiring the user to hit RETURN?
Date: Thu Mar 18 17:16:55 EST 1993

4.1) RETURN キーを打たずに端末から文字を読むにはどうすれば いいんでしょうか。

まず、お使いのシステムが BSD なら cbreak モードを、SysV ならば ‾ICANON モードを試してみて下さい。

端末パラメータを御自分で頑張って設定するのが面倒で嫌になった方、stty プログラムを使えば簡単にできます (端末パラメータの設定には "ioctl(2)" システムコールを使います)。以下に例を示します。しかしながら、この例の ような方法では実行速度が遅く、効率的でありません。折を見てコードをちゃ んと (ioctlを使って) 書き直した方がいいでしょう。

    
#include <stdio.h>
main()
{
    int c;

    printf("Hit any character to continue¥n");
    /*
     * ここは ioctl() の方がいい。面倒臭がりな
     * プログラマはこうするでしょうけど。
     */
    system("/bin/stty cbreak");       /* または "stty raw" */
    c = getchar();
    system("/bin/stty -cbreak");
    printf("Thank you for typing %c.¥n", c);

    exit(0);
}
何人かの方々が、この問題のより正確な解答を私に送ってくれました。済みま せんが、それらはこのリストの守備範囲を越えていますので、ここには掲載し ません。

便利な画面制御のライブラリである "curses" のドキュメントを調べてみるの もいいかも知れません。この例のような単一文字の入出力をよく使うというこ とは、画面表示の制御をしたりすることも多いのではないでしょうか。 "curses" ライブラリには文字入力、画面制御の両方に関するいろいろ便利な関 数群が含まれています。


UNIX FAQ LIST / Copyright(c)1994,Ted Timar / tmatimar@isgtec.com


Maintainer: あさだ たくや