manページについて
Plan9 (UNIX)プログラミングに欠かせないmanページについて、ちょっとまとめてみる。
セクション
まず、UNIXとPlan9でセクションが微妙に違う。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で設定できる。NetBSD、OpenBSDとFreeBSD (MacOS X)でフォーマットが違うなぁ。LinuxはFreeBSDと同じ。
前者としてOpenBSDのman。
後者のmanは、Federico Lucifrediさんによってメンテされている。
Plan9のmanはページャを使わないので、ページャを使って見たい場合は次のように実行する。
term% man man|p