Last modified: Jan 09 04:28 JST 2003

Solaris のための kludge

Solaris で必要に迫られて(?) 作った kludge と呼ぶに相応しいプログラムです。 ;-p

ちなみに kludge というのを Eric S. Raymond の Jargon で引いてみると

kludge
/klooj/ [名詞] もとは kluge の間違ったスペルが20世紀後半以降に広まってしまったもの。
kluge
/klooj/ (中略) 2. [名詞] ある特定のたちの悪い問題を、 明確でなくとも間に合わせの方法で解決しようとする プログラミング上の小賢しい技。 (後略)
てなことが書いてあります (もとは英語ですが)。まあそんなもんです。

これらのプログラムの使用の結果何らかの損害が生じても作者は一切の責任を負いません。 これらのプログラムをお試しになる場合は自己責任でお願いします。

Solaris 2.5.1 用 snprintf

Solaris 2.5.1 (SunOS 5.5.1) の標準Cライブラリには snprintf / vsnprintf がありませんが、代わり (?) に __snprintf / __vsnprintf があります。 そこでこれをごまかして使ってやろうというプログラムです。 「その1」、「その2」は (1つのプログラムに対しては) どちらかの方法を使ってください。

その1 - ヘッダファイル (Mar 15, 2002 / 296 bytes)
このヘッダを #include すればそのソース中では (v)snprintf が使えます。 Solaris 2.6 以降では __(v)snprintf は libc から消えているのですが、このヘッダファイルではバイナリファイルをそのまま 2.6 に持っていっても動くようにしています。 ただしリンクに GNU ld を使っているとうまくいきません。 Sun の ld (/usr/ccs/bin/ld) を使ってください (これが GNU ld のバグなのか仕様なのか、それとも Sun の ld にバグがあってたまたまうまく行っているのかどうかは分かりません)
その2 - LD_PRELOAD ライブラリ (Mar 15, 2002 / 1514 bytes)
環境変数 LD_PRELOAD で指定すればアプリケーションから (v)snprintf が見えるようになる共有ライブラリです (プログラム本体の再コンパイル・リンクは不要です)。 Solaris 2.6 以降用にコンパイルされたプログラムは、このライブラリを咬ませれば 2.5.1 でも動くかも知れません。ただし 2.6 以降ではこのライブラリは使えません (もし 2.6 以降で LD_PRELOAD に指定すると実行時にエラーになります)。また (当然ながら) スタティックリンクされたプログラムには効果はありません。
注意
2.5.1 の __(v)snprintf は 2.6 以降の (v)snprintf、および ISO C99 のそれらとはバッファが溢れた場合の返り値が違うようなので、 それらが問題となる場合はこの手は使えません。バッファが溢れたとき、

サーバ機用温度表示プログラム (Apr 14, 2002 / 2527 bytes)

SunOS 5.x (SPARC 版) の envctrl ドライバを利用して、システムに内蔵されている温度センサの測定値を表示するプログラムです。 Sun Enterprise 450 (SunOS 5.6) でしかテストしていません (触れるサーバがこれしかないので…) が、ハードウェア監視用の I2C バスを内蔵したサーバ機なら たぶん使えると思います (逆に、 SPARCstation や Ultra-60 のような「ワークステーション」ではたぶんだめでしょう)。

ソースファイル1個だけで Makefile などはありません (手抜き…)。コンパイルの方法はソース末尾のコメントに埋め込んであります (Emacs に読み込めば M-x compile でコンパイルできます)。

SunOS ディスクラベル表示プログラム (Jun 24, 2002 / 3351 bytes)

SunOS 4.x および 5.x で使われているディスクラベル (パーティションテーブル) の内容を表示するプログラムです。 SunOS 固有のヘッダファイル (<sys/dklabel.h> など) には頼らないように作ってあり、 Linux を含む Un*x 系のシステムでなら大抵そのまま使えると思います (ただしコンパイルには GCC が必要です)。 SunOS の SPARC 版と Intel 版ではディスクラベルの形式やバイトオーダが異っていますが、 それらは自動判別します。また似たような機能のプログラムでは prtvtoc コマンドが SunOS にバンドルされていますが、 そちらがディスクデバイスファイルに対してのみ使用できるのに対して、 このプログラムでは通常ファイル (ディスクイメージ) や標準入力からもディスクラベルを読むことができます。

これもソースファイル1個だけで、 コンパイルの方法はソース末尾のコメントに埋め込んでいます。


KMC のトップページ / 1つ上のディレクトリのインデックス / このディレクトリのインデックス
tak@kmc.gr.jp