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);
}