ボタンを押すのに反応するプログラムを作成する方法(例:「q」に「more」)[閉じる]

ボタンを押すのに反応するプログラムを作成する方法(例:「q」に「more」)[閉じる]

pg\more\lessユーティリティがどのように機能するかを理解したいと思います。たとえば、cat somebigfile |今より多くのインタラクティブモードがあります。彼のfdテーブルは次のようになります:0(catからパイプを読む)1(stdout)2(stderr)

3 fdで/dev/ttyを開き、そこからコマンドを読み取ることができます。ただし、Enterキーを押すことなく特定の操作を実行できることがより重要です。 Linuxではncursesを使用できます。これをSolarisで実装するには何を知る必要がありますか?

答え1

基本的なアイデアは、入力から文字を読むことです()。http://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/view/head:/text-utils/more.c#L1908たとえば(Googleの検索結果で見つかりました。https://stackoverflow.com/questions/9854267/implementing-the-more-unix-utility-command):

int readch(void)
{
    unsigned char c;

    errno = 0;
    if (read(fileno(stderr), &c, 1) <= 0) {
        if (errno != EINTR)
            end_it(0);
        else
            c = otty.c_cc[VKILL];
    }
    return (c);
}

関連情報