2012年1月15日日曜日

mntgen

あるディレクトリにcdしたときに、そのディレクトリを作成する(実際にはフェイク)。
/n(すべてのネットワークがマウントされる)で使われる。
ネットワークマシンやサービスは膨大であり、すべてのサービスでディレクトリを作成することは現実的ではない。
mntgenを使えば、/nは空のままで、どんなサブディレクトリにもサービスをマウントすることができる。

参考
http://www.ueber.net/who/mjl/inferno/getting-started.html

srvデバイス

srv・・・server registry
Plan 9でのプロセス間通信。

bind #s /srv
#s /service1
#s /service2

サービスに対してすでにオープンされたチャネルを保持している1階層のディレクトリ。
オープンしたファイルデスクリプタを他のプロセスから利用できるようするために投稿する掲示板のようなものである。

チャネルをインストールするためには/srv/mysrvのような新しいファイルを作り、オープンしたファイルデスクリプタ番号を与える文字列(strtoulに適合する)を書き込む。
登録されたオープンされたファイルへの別の参照を得るためには/srv/myserv をオープンする。
たとえ,ファイルをオープンしているプロセスがなくとも,srv の1つのエントリは関連したファイルへの参照を保持する。/srv からファイルを削除するとその参照は解放される。
サーバーファイルに一つ以上の数字を書き込むことやすでに使われている名前と同じな前のファイルを作成することはエラーになる。
パイプの片端を/srvに作ることは名前付きパイプを作ることになる。
int fd, p[2];
char buf[32];
pipe(p);
fd = create("/srv/namedpipe", OWRITE, 0666);
fprint(fd, "%d", p[0]);
close(fd);
close(p[0]);
fprint(p[1], "hello");
文字列helloを読み込むためには/srv/namedpipeをオープンして読み込む。
/srv/namedpipe に書き込まれたデータは上記のプロセスで以下を実行することで受信できる。
read(p[1], buf, sizeof buf);
SOURCE
/sys/src/9/port/devsrv.c

参考
http://plan9.aichi-u.ac.jp/pipe/

bindとmount

Plan 9でのbindとmountを解説する。この2つのコマンドは同じ名前空間に属するプロセスの名前空間を修正することができる。

Unix系OSと違い、Plan 9のbind/mountは一般ユーザーで実行可能である。Unixの名前空間は1つであるが、Plan 9の名前空間はプロセスごとに存在しているためである。

mountはサーバが提供するサービスをファイルとして名前空間にマウントし、使えるようにする。さらに、Unixとは違い、mountされたファイルシステムは他のユーザーからは不可視である。

bindはUnixのlnコマンドに似ている。あるファイルやディレクトリを他のファイルやディレクトリにバインドすることができる。これは、ショートカットの作成とみなすこともできる。また、別名をつけているとみなすこともできる。さらには、同じ名前同士ならオブジェクト指向のオーバーライドに似た効果を発揮することもできる。ディレクトリどうしならユニオンディレクトリになる。

bindの-aと-bオプションは同じファイルまたはディレクトリが存在した時の優先度を表す。
bindの-bオプションは優先度を高くする。つまり、既存のファイルまたはディレクトリを置き換える効果がある。
bindの-aオプションは優先度を低くする。

2012年1月14日土曜日

9frontでのupdate

9frontは本家Plan 9とは違い、mercurialでデストリビューションのアップデートを行う。

bind -ac /dist/plan9front /
hg pull
hg update
http://code.google.com/p/plan9front/wiki/admin