Solaris で必要に迫られて(?) 作った kludge と呼ぶに相応しいプログラムです。 ;-p
ちなみに kludge というのを Eric S. Raymond の Jargon で引いてみると
てなことが書いてあります (もとは英語ですが)。まあそんなもんです。
- kludge
- /klooj/ [名詞] もとは kluge の間違ったスペルが20世紀後半以降に広まってしまったもの。
- kluge
- /klooj/ (中略) 2. [名詞] ある特定のたちの悪い問題を、 明確でなくとも間に合わせの方法で解決しようとする プログラミング上の小賢しい技。 (後略)
これらのプログラムの使用の結果何らかの損害が生じても作者は一切の責任を負いません。 これらのプログラムをお試しになる場合は自己責任でお願いします。
snprintfSolaris 2.5.1 (SunOS 5.5.1) の標準Cライブラリには snprintf
/ vsnprintf がありませんが、代わり (?) に
__snprintf / __vsnprintf があります。
そこでこれをごまかして使ってやろうというプログラムです。
「その1」、「その2」は (1つのプログラムに対しては)
どちらかの方法を使ってください。
#include すればそのソース中では
(v)snprintf が使えます。
Solaris 2.6 以降では
__(v)snprintf は libc
から消えているのですが、このヘッダファイルではバイナリファイルをそのまま
2.6 に持っていっても動くようにしています。
ただしリンクに GNU ld を使っているとうまくいきません。
Sun の ld (/usr/ccs/bin/ld) を使ってください
(これが GNU ld のバグなのか仕様なのか、それとも Sun の
ld にバグがあってたまたまうまく行っているのかどうかは分かりません)。
LD_PRELOAD ライブラリ (Mar 15, 2002 / 1514 bytes)
LD_PRELOAD で指定すればアプリケーションから
(v)snprintf
が見えるようになる共有ライブラリです
(プログラム本体の再コンパイル・リンクは不要です)。 Solaris 2.6
以降用にコンパイルされたプログラムは、このライブラリを咬ませれば
2.5.1 でも動くかも知れません。ただし
2.6 以降ではこのライブラリは使えません (もし 2.6 以降で
LD_PRELOAD に指定すると実行時にエラーになります)。また
(当然ながら) スタティックリンクされたプログラムには効果はありません。
__(v)snprintf は
2.6 以降の (v)snprintf、および
ISO C99 のそれらとはバッファが溢れた場合の返り値が違うようなので、
それらが問題となる場合はこの手は使えません。バッファが溢れたとき、
__(v)snprintf
は、実際にバッファに書き込まれた文字数
(= 与えられたバッファのサイズ - 1) を返します。
v)snprintf は、
バッファが十分大きいと仮定した場合に書き込まれるであろう文字数を返します。
SunOS 5.x (SPARC 版) の envctrl
ドライバを利用して、システムに内蔵されている温度センサの測定値を表示するプログラムです。
Sun Enterprise 450
(SunOS 5.6) でしかテストしていません
(触れるサーバがこれしかないので…)
が、ハードウェア監視用の I2C バスを内蔵したサーバ機なら
たぶん使えると思います (逆に、 SPARCstation や
Ultra-60 のような「ワークステーション」ではたぶんだめでしょう)。
ソースファイル1個だけで Makefile などはありません
(手抜き…)。コンパイルの方法はソース末尾のコメントに埋め込んであります
(Emacs に読み込めば M-x compile でコンパイルできます)。
SunOS 4.x および 5.x
で使われているディスクラベル (パーティションテーブル)
の内容を表示するプログラムです。 SunOS 固有のヘッダファイル
(<sys/dklabel.h> など)
には頼らないように作ってあり、
Linux を含む Un*x 系のシステムでなら大抵そのまま使えると思います
(ただしコンパイルには GCC が必要です)。
SunOS の SPARC 版と
Intel 版ではディスクラベルの形式やバイトオーダが異っていますが、
それらは自動判別します。また似たような機能のプログラムでは
prtvtoc コマンドが SunOS にバンドルされていますが、
そちらがディスクデバイスファイルに対してのみ使用できるのに対して、
このプログラムでは通常ファイル (ディスクイメージ)
や標準入力からもディスクラベルを読むことができます。
これもソースファイル1個だけで、 コンパイルの方法はソース末尾のコメントに埋め込んでいます。