2012年1月15日日曜日

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/

0 件のコメント:

コメントを投稿