manページについて

Plan9 (UNIX)プログラミングに欠かせないmanページについて、ちょっとまとめてみる。

セクション

まず、UNIXPlan9でセクションが微妙に違う。Plan9だとライブラリ関数とシステムコールが同じセクションになり、ファイルサービスや9Pのセクションが独立して存在する。

セクション UNIX Plan9
1 コマンド コマンド
2 システムコール ライブラリ関数、システムコール
3 ライブラリ関数 カーネルバイス(bind経由でアクセス)
4 デバイスドライバ ファイルサービス(mount経由でアクセス)
5 ファイル 9P
6 ゲーム ファイルフォーマット
7 共有ファイル データベース
8 システム管理 システム管理

検索

UNIXの場合、apropos(1)やman -kなどで検索する。また、コマンド名や関数名がわかっていれば、whatis(1)を使えばよい。aproposやwhatisは、makewhatis(8)によって作られるwhatisデータベースを参照して検索する。Plan9には、whatisに似たlookman(1)というコマンドがあって、次のように使える。

term% lookman wstat
man 2 0intro # 0intro(2)
man 2 9p # 9p(2)
man 2 fcall # fcall(2)
man 2 stat # stat(2)
man 4 dossrv # dossrv(4)
man 4 nfs # nfs(4)
man 4 u9fs # u9fs(4)
man 5 0intro # 0intro(5)
man 5 stat # stat(5)
man 5 walk # walk(5)
man 8 9pcon # 9pcon(8)
man 8 fossilcons # fossilcons(8)
man 8 fs # fs(8)
man 8 fsconfig # fsconfig(8)

あと、UNIXになくPlan9特有なのはsig(1)で、関数のプロトタイプ宣言だけを表示してくれる。引数の順番を忘れたとかいって、しょうっちゅうmanページを引いたりするので、それなりに使えるかもしれない。

term% sig wstat
	int wstat(char *name, uchar *edir, int nedir)

余談だが、Plan9のwhatis(1)はwhich(1)に相当する。

term% whatis man
/bin/man

エディタからmanページを参照する

Emacsを使っている場合は、M-x manでカーソル位置のmanを引くことができる。viは(できるだろうけど)知らない。Acmeだと、1クリックでmanページを引くことができる(裏でplumberが動いている)。

実装

man自体はページのフォーマッティングはroff(nroff、troff、groff)に丸投げする。Plan9のmanはrcスクリプトになっていて中でtroffを呼び出している。一方、UNIXの場合は、roffに何を使うとか、pagerは何を使うという挙動をman.confで設定できる。NetBSDOpenBSDFreeBSD (MacOS X)でフォーマットが違うなぁ。LinuxFreeBSDと同じ。

前者としてOpenBSDのman。

後者のmanは、Federico Lucifrediさんによってメンテされている。

Plan9のmanはページャを使わないので、ページャを使って見たい場合は次のように実行する。

term% man man|p