揮発性のメモ2

知識をメモ書きしておく

キューの管理

優先順位のついたキューがほしい。ついでにプロセス間通信としての機能も含めて考える。
複数クライアントから単一サーバへ片方向のみ受け渡しが出来ればいい

POSIX メッセージキュー System V メッセージキュー 自作デバイスドライバ 名前付きパイプ UNIXドメインソケット
使い方 mq_open() msgget() open() open() *1 socket()
n対1通信 可能 可能 可能 可能 *2 可能
優先順位 つけられる つけられるし指定も出来る つけるように作ればできる つけられない つけられない
通信相手 いなくても可 いなくても可 いなくても可 いないとダメ いないとダメ
selectで 待てる*3 待てない *4 待てる 待てる 待てる
キューのサイズ 大きいし可変 大きいし可変 どうでもできる 小さい *5 小さい
スクリプトからの利用 面倒 perlなら簡単 簡単にする 簡単 普通
そのた CONFIG_POSIX_MQUEUE=y とか selectが使用禁止になるのは致命的 カーネル依存は不便 あとでTCPとかに出来る

細かいことは UNIXネットワークプログラミング〈Vol.2〉IPC:プロセス間通信 に全部書いてあるのでちゃんと読む

*1:mkfifoしてから

*2:write側が全員閉じたらつられてcloseしてしまう

*3:本来はダメなんだが、Linuxだけ特別に待てるようになってる

*4:というか危険

*5:デフォルトは確か4Kバイト