MUSH
UNIX(SVR4) システムコールを利用するためのクラスライブラリです.
システムサービスを利用するのに,非クラス関数のシステムコールを直接呼ばずに済み,複雑な引数に煩わされません.
また,各UNIX実装間のシステムコールの微妙な違いを吸収するラッパーとしても働きます.
作成には充分注意しておりますが,間違い等が含まれている可能性があります.
動作の保証はできませんので,御了承下さい.
なお,ライセンスは "LGPL Version 2.1" とします.
LGPL2.1 の詳細については,配布パッケージに含まれている COPYING-LGPL2.1 ファイル を参照してください.
MUSH は,分散型汎用オンライン環境の構築を目指す KiNOKO プロジェクトの一部として作成されました.
KiNOKO プロジェクトの詳細については,KiNOKO ホームページ を御覧下さい.
現在,以下のオペレーティングシステムでの動作を確認しています.
基本的に,System V Release 4 系の UNIX なら,動作するはずです.
OS |
コンパイラ |
備考 |
Linux 2.2/2.4 |
gcc 2.95 Intel C++ Compiler 5.0.1 |
- |
AIX 4.3.3 |
VisualAge C++ Version 5 gcc 2.95 |
- |
Solaris 2.5/2.6 for SPARC |
Sun WorkShop 4.2 gcc 2.8.1 |
WorkShop 4.2 は 別途 STL ライブラリが必要 |
Digital UNIX 4.0 |
Digital C++ 6.1 |
- |
MUSH ライブラリ自体は KiNOKO の一部としてメンテナンスされているものの,このページは最近あまりメンテナンスされていません.最新版の MUSH ライブラリは KiNOKO パッケージの kinoko/src/kernel/lib-common/mush に含まれています.KiNOKO パッケージは,KiNOKO ホームページ よりダウンロードできます.
kinoko/src/kernel/lib-commom/mush 以下だけをコピーすれば,ここで配布されているパッケージと同じものになります.
MUSH のパッケージをコンパイルすると libmush.a が生成されます.
libmush.a と,その他必要になるシステムのライブラリ (libsocket.a など)
をリンクしてください.必要なライブラリは,configure により作成された
Makefile を参照してください.
$(CXX) -o myprogram myprogram.cc -I$(MUSH_PATH) -L$(MUSH_PATH) \
-lmush -lsocket -lnsl -lpthread
ディレクトリ samples には,いくつかのサンプルプログラムがあります.
samplesディレクトリで makeとすればコンパイルできます.
- file-attribure-test.cc: ファイルおよびファイルシステムの属性取得
- 書式: file-attribute-test ファイル名
- 引数に渡されたファイルおよびそのファイルのあるファイルシステムの情報を表示します.
- domestic-socket-test.cc: UNIX ソケットを使った通信
- 書式: domestic-socket-test ソケット名
- ターミナルを2つ開いてそれぞれで同じソケット名を指定して実行してください.最初に起動された側がエラーメッセージを出したあとサーバになり,接続を待ちます.
- network-socket-test.cc: INET ソケットを使った通信
- 書式: network-socket-test ホスト名 ポート番号
- ターミナルを2つ開いてそれぞれで同じポート番号を指定して実行してください.最初に起動された側がエラーメッセージを出したあとサーバになり,接続を待ちます.
- message-queue-test.cc: メッセージキューを使った通信
- 書式: message-queue-test -s
- 書式: message-queue-test -c
- -s を指定するとサーバになります.クライアントはいくつでも起動することができます.
- shared-memory-test.cc: 共有メモリを使った通信
- 書式: shared-memory-test -r
- 書式: shared-memory-test -w
- -r を指定するとサーバになります.クライアントはいくつでも起動することができます.
- process-test.cc: 子プロセスの実行
- 書式: process-test
- 実行すると子プロセスとして "/usr/X11R6/bin/xterm -e vi" を実行し,終了を待ちます.
- signal-test.cc: シグナルハンドリング
- 書式: signal-test
- 実行すると3秒ずつブロックしながら INT, TERM, QUIT シグナルをハンドリングします.INT (Ctrl-c) でメッセージを出力し,TERM または QUIT (Ctrl-\) で終了します.
- timer-test.cc: タイマー割り込み
- 書式: timer-test
- 実行すると1秒ごとに画面にドットを表示します.
- misc-test.cc: システム情報の取得
- 書式: misc-test
- 日付,ホスト名,ユーザ名,DISPLAY環境変数の値を表示します.
- regular-expresson-test.cc: 正規表現のテスト
- 書式: regular-expression-test パターン [置換文字列]
- 実行するとプロンプトを出し入力を読みます.入力がパターンにマッチするかテストし,もし置換文字列が与えられていれば置換を行います.
- zlib-test.cc: zlib を使ったファイル圧縮
- 書式: zlib-test -c 入力ファイル名 出力ファイル名
- 書式: zlib-test -d 入力ファイル名 出力ファイル名
- -c で圧縮を行い,-d で展開をします.
- compressed-file-test.cc: zlib を普通のファイルインターフェースで使うデモ
- 書式: zlib-test -c 入力ファイル名 出力ファイル名
- 書式: zlib-test -d 入力ファイル名 出力ファイル名
- zlib-test と同様ですが,内部で通常のファイルと同じインターフェースを使用しています.
- console-test.cc: readline を使った入力
- 書式: console-test.cc
- 実行するとプロンプトを出し,入力を読みます.行編集やヒストリ,タブ補間などの機能が使えます.
- console-stream-test.cc: readline を iostream 経由で使うデモ
- 書式: console-stream-test
- console-test と同様ですが,内部で iostream を使っています.
- argument-list-test.cc: 起動引数の解読
- 書式: argument-list-test [オプション...] [パラメータ...]
- 与えられた起動引数を解析して表示します.オプションは "-" から始まり,= で値を渡すこともできます(--prefix=/usr/local/mushなど).
- checksum-test.cc: CRC32 サムの計算
- 書式: checksum-test ファイル名
- 引数に渡されたファイルの CRC32 サムを計算します.出力形式は cksum(1) と同じです.
Category 1: 基本機能
- MushFile.hh:ファイルI/O
- TMushFile
- TMushLockFile
- MushFileSystem.hh:ファイル操作・属性取得など
- TMushFileSystem
- TMushFileAttribute
- MushSocket.hh:ソケット通信
- TMushSocket(Abstract)
- TMushServerSocket(Abstract)
- TMushClientSocket(Abstract)
- MushDomesticSocket.hh:ソケット通信 (UNIX ソケット)
- TMushDomesticSocket(Abstract)
- TMushServerDomesticSocket
- TMushClientDomesticSocket
- MushNetworkSocket.hh:ソケット通信 (INET ソケット)
- TMushNetworkSocket(Abstract)
- TMushServerNetworkSocket
- TMushClientNeteotkSocket
- MushSocketSelector.hh:ソケットへのポーリング
- TMushSocketSelector
- MushSocketStream.hh:ソケット入出力を C++ の iostream で行う
- TMushSocketStreamBuffer
- TMushInputSocketStream
- TMushOutputSocketStream
- MushIpc.hh:プロセス間通信 (SystemV IPC)
- TMushMessageQueue(Abstract)
- TMushServerMessageQueue
- TMushClientMessageQueue
- TMushSharedMemory(Abstract)
- TMushServerSharedMmory
- TMushClientSharedMemory
- MushProcess.hh:プロセスコントロール
- TMushProcess
- TMushChildProcess
- MushSignal.hh:シグナル処理
- TMushSignalHandler
- TMushSignalClient(Interface)
- TMushSignalCounter
- TMushSignalSender
- MushTimer.hh:インターバルタイマー
- TMushIntervalTimer(Abstract)
- TMushRealTimeTimer
- TMushVirtualTimeTimer
- TMushProfileTimeTimer
- MushThread.hh:スレッド(作成中)
- TMushThread
- TMushThreadRunnable(Interface)
- TMushThreadMutex
- TMushThreadCondition
- MushMisc.hh:その他 (日付時間,設定情報 など)
- TMushDateTime
- TMushUser
- TMushLocalHost
- TMushEnvironmentVariable
Category 2: 標準(的)ライブラリインターフェース
- MushRegularExpression.hh:標準正規表現ライブラリへのインターフェース
- TMushRegularExpression(Abstract)
- TMushPosixRegularExpression
- MushDataCompressor.hh:データ圧縮ライブラリへのインターフェース
- TMushDataCompressor(Abstract)
- TMushZlibDataCompressor
- MushConsole.hh:コンソールライブラリへのインターフェース
- TMushConsole(Abstract)
- TMushReadlineConsole
- MushConsoleStream.hh:コンソールライブラリを C++ の iostream で使う
- TMushConsoleStreamBuffer
- TMushInputConsoleStream
- TMushOutputConsoleStream
Category 3: 低レベルユーティリティ
- MushArgumentList.hh:起動パラメータの解読
- TMushArgumentList
- MushCheckSum.hh:データのチェックサム計算
- TMushCheckSum(Abstract)
- TMushCrc32CheckSum
- TMushMd5CheckSum(作成中)
- MushDataEncoder.hh:データ変換(バイトオーダ修正や圧縮など)
- TMushDataEncoder(Interface)
- TMushBinaryDataEncoder
- TMushZlibEncoder
- TMushBase64Encoder(作成中)
- MushChainedFile.hh:巨大ファイルの分割
- TMushChainedFile
- MushDecoratedFile.hh:付加機能付きファイル
- TMushDecoratedFile(Decorator)
- TMushEncodedFile
- TMushCompressedFile
- MushFramedFile.hh:フレーム単位でのファイル入出力
- TMushFramedFile
- TMushFramedFileIndex
- MushDecoratedSocket.hh:付加機能付きソケット
- TMushDecoratedSocket(Decorator)
- TMushFramedSocket
- TMushEncodedSocket
- 20 August 2002
- データのチェックサムクラス CheckSum を追加.
- データ圧縮を行う DataCompressor を追加.
- TMushFile の Open() と Seek() の仕様を変更.引数に定数を渡すのをやめた.
- その他 たくさんの改良とバグフィクス
- Version 0.4.0 リリース.
- 24 October 2001
- フレーミングやエンコードなどのための DecoratedFile/DecoratedSocket を追加.
- 起動引数解析クラス ArgumentList を追加.
- 正規表現クラス RegularExpression を追加.
- コンソール入出力インターフェースクラス Console を追加.
- Version 0.3.0 リリース.
- 6 May 2000
- サンプルプログラムをちゃんと作った.
- Version 0.2.2 リリース.
- 2 May 2000
- 環境依存部分を MushConfig.hh に分離
- メッセージキューの Send()/Receive() に NOWAIT オプションを付けられるようにした.
- メッセージキューの Send()/Receive() で EINTR と EAGAIN 以外のエラーが起きたら,例外を投げるようにした.
- ファイルのオープンフラグが正しく設定されない場合が生じるバグを修正.
- NetworkSocket のアドレスの取得が失敗する場合が生じるバグを修正.
- SocketSelector の救いようのないバグを修正.ついでに仕様もちょっと変更.
- Version 0.2.1 リリース.
- 14 Jan 2000
- ファイル名を全て変更(ごめんなさい).単語の先頭を大文字にした.
- MushTimer の内部仕様を少し変更.外部インターフェースは関係ない.
- chat* を string に変更.
- いくつかのバグを修正.
- NetworkSocket と DomesticSocket を別のファイルに分けた.
- poll() システムコールを実装した SocketSelector を追加.
- Version 0.2.0 リリース.
- 18 June 1999
- Version 0.1.0 リリース.
- UDP ソケットを使えるようにする.
- マルチスレッド対応をちゃんとする.
- ターミナルコントロールライブラリ (Curses など) へのインターフェースを作る.
- libcrypt へのインターフェースを作る.
Edited by: Enomoto Sanshiro