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 リリース.

今後の予定


Edited by: Enomoto Sanshiro