如何制作对按下按钮做出反应的程序(例如“q”上的“更多”)

如何制作对按下按钮做出反应的程序(例如“q”上的“更多”)

我试图了解 pg\more\less 实用程序是如何工作的。例如,cat somebigfile |更多的。现在有更多交互模式。他的fd表是:0(从cat读取管道)1(stdout)2(stderr)

我可以在 3 fd 上打开 /dev/tty 并从中读取命令。但更多的是无需按回车键即可执行某些操作。在linux上我可以使用ncurses。要在 Solaris 上实现它,我需要了解什么?

答案1

基本思想是从输入中 read() 一个字符;看http://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/view/head:/text-utils/more.c#L1908作为一个例子(我通过谷歌搜索结果发现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);
}

相关内容