オフィスの電源事情 写真 4 分の増設 図 4 悪い酉列その 1 分電盤 度しかありませんでした。負荷を減らすには、回路を増設 する以外にありません。 ところが、回路の増設はたいへん厄介なのです。 分電盤には多少の予備回路が用意されていますが、それ はど多くありません。回路を大がかりに増やすとなると、 写真 4 のように分電盤を増設する必要が生します。これ は、見た目にも美しくありません。しかもこのスペースが ないと、離れた場所に分電盤を取り付けてケープルを引き 回したり、オフィスの壁面に分電盤を取り付けるという面 倒なことになります。 こういった場合、図 6 のように回路とコンセントを十分 に用意しておけは、追加工事は不要になります。しかし、 このような方式では初其財殳資が大きく、分電盤付近でケー プルがかさはってしまいます。そこて最丘では、図 7 のよ うに、サテライト分電盤を設置するガ去をとるようになり 図 4 のように、必要なところにだけコンセントを設置し ました。 た場合は、機器の移動先にコンセントがなく、コンセント サテライト分電盤は 4 ~ 6 個のプレーカを内蔵してお の移重丿 j 助日工事が必になったりします。 り、そこで回路を分岐します。この場合、距離の長い部分 また、図 5 のように、コンセントの数は十分でも 1 回路 の酉当泉は終っているので、あとは、必要に応じてサテライ あたりのコンセントが多すぎる場合は、特定の回路に負荷 ト分電盤から机まで酒当泉するだけです。初期投資もさはど が集中してプレーカか落ちやすくなります。使用機器か増 かからず、酉当泉の追加費用も最小限ですみます。 えた場合には、新たなコンセント回路を設置する必要があ なお、末端の回路を豊富に用意しても、消費電力か増加 ります。 するわけではありませんし、それだけではランニングコス 過日、 PC やワークステーションを増やしたところ、 PC トは増えません。実際に機器か接続されてはじめて電力を の CRT 画像がピクピク揺れるようになったという相談を 消費するのですから、安じ、して回路を増やしましよう。 受けました。 新築ビルや新しく入居するときにはこれらのことも考慮 調べてみると、 1 回路 ( 20A ) が 24 台の机に配電されて できますが、すでに入居しており、 EPS やキュービクルな おり、もっとも遠い机までのケープル長が 50m にもなっ どの関係から、もう増設できないということもあります。 ていました。これに PC が 10 台、ワークステーション そのような場合には、消費電力を切り詰め、何年間いられ が 3 台、レーザープリンタが 2 台も接続されていたので るかを考えながら新しいピルを捜すしかありません。 す。この回路には常時 20A 前後、ピークには 25A 程度 の電流か流れ、末端のコンセントの電圧は 85 ~ 90V 程 図 5 悪い酉」その 2 分電盤 105 UNIX MAGAZINE 1992 ユ 2
でファイルに対する入出力をおこなおうとしても何も起こ らない。 open の成否はかならすチェックしなければなら open(FH, file) Ⅱ die; 一般的には②のように、 オープンに失敗した理由が文字列で入っている。たとえ ( 2 ) の die に渡されている $ ! という変数には、ファイルの せたい場面が多いからである。 プンできなかったときには、メッセージを出力して終了さ という構文を使うことが多い。必要とするファイルがオー ば、対象のファイルが存在しないときには、 /etc/passwd: NO such file or directory というメッセージを出力して終了する。 この die の使い方にはちょっとしたコツがある。指定す るメッセージの最後に、、 \ n ク ( 改行文字 ) があるかどうか で、表示されるメッセージが異なるのだ。前例のように改 行が含まれているとその文字列だけを表示するが、改行が ない場合は、指定したメッセージに続けて、プログラムが どの行で終了したかが表示される。両方を試してくらべて みるとよいだろう。 ファイルからの読込み ( 3 ) ( 4 ) ( 2 ) while ( $ ー while ( く PASSWD>) { print ; @passwd = く PASSWD> ; print @passwd ; print く PASSWD> ; く PASSWD>) { print $ ー 前回までは、標準入力や引数で指定したファイルからデ ータを読むために、◇という表記を使ってきた。ファイル ハンドルを使ってファイルからデータを読む場合は、 く F 工 LEHANDLE> という表記を使用する。く〉は、一財彡からファイルハンド ルを省略した形だと考えてもよい。 く FILEHANDLE 〉は、スカラー・コンテキストではオープ ンしたファイルから 1 行ぶんのデータを読み込んで、その 文字列を返す。 ( 1 ) は、 /etc/passwd から 1 行ずつ $ ーという 変数に読み込んで、それを出力するプログラムである。 く〉と同様に、 while 文の条件式でく FILEHANDLE 〉を使 用すると、暗黙のうちに $ ーに対する代入がおこなわれる。 したがって、 ( 2 ) のように書いても ( 1 ) とまったく同し意味に なる。 く FILEHANDLE> は、リスト・コンテキストではファイル のなかの各行を要素とするリストを返す。 ( 3 ) のように 136 く PASSWD 〉を配列に代入すると、ファイルの内容をすべ て読み込んで配列に代入する。小さなファイルの場合には、 このような処理をすることもあるが、大きさが分からない ファイルを読み込むときには十分注意しなけれはならない。 ( 4 ) は、 print 文の引数としてく PASSWD 〉を使っている。 こでは当然リスト・コンテキストで評価されるので、や はりファイルの中身すべてが表示されることになる。 print scalar( く PASSWD>) ; のようにスカラー・コンテキストで評価させれば、最初の 1 行だけカ俵示される。 UNIX MAGAZINE 1992.12
図 1 単純なパス構造のワークステー ぐ / ョン 写真 12 Sun2 の Multibus カ ードゲー 、ノ ・ 0 CPU Memory Disk I/F Ether I/F Frame Buffer Senal I/F オーティオ・インターフェイス 蜷広マルチメディアか流行になっていますが、その 一環としてオーディオ入出力機能をもっワークステーショ ンか増えてきました。オーディオ機能といっても、 PC の ように FM 音源や MIDI インターフェイスを備えている わけではなく、多くは音声データをデジタル化して取り込 む機能と、逆に音声データを音声信号に復兀する ( スピー カーを内蔵しているものも多い ) 機能をもつだけです。音 質は電言呈度から、機種によっては CD に P 攵する音質 のステレオ音声か扱えます。 / ヾラレノレポート セントロニクス準拠のプリンタ・インターフェイスを、 ノヾラレルポート " とか、、パラレル・インターフェイス と称することが多いようです。、、パラレル " とは並列とい う意味で、 1 度に 8 ピットすつ出力できます。ちなみ に、、 Centronics" はプリンタメーカーの名前で、この会社 のプリンタのインターフェイス規格か業界標準となり、社 名がそのままインターフェイスの名前になりました。 パラレルポートは多くの場合は出力専用ですが、ソフト ウェアの設定しだいでデータの入力ができるものもあり ます。 PC ではここに Ethernet インターフェイスを接 続する例をよく見かけますが、ワークステーションでは (Ethernet は別にもっていますから ) 普通はプリンタ接 続にしか使用しません。 System Bus 拡張スロット ワークステーションのハードウェアを拡張するための 空き領域です。数 cm 四方の基板を挿し込みま す。廉価版のワークステーションでは省かれていることも あります。多くの場合、フレームバッフアや入出力装置へ のインターフェイスを追加するために使用します。機種に よっては、 CPU など必顎な部分もスロットに挿し込む方 式になっているものがあります。この場合、、、拡張スロッ ト " ではなく、、空きスロット " と呼んだりします。 / ヾス バスは bus と書き、乗合い自動車 8 のバスと同じ綴り です。、、母線 " とも訳されますが、複数の言 t 算オ冓成要素 か相圧に信号を送受するために使う、共通の泉のことで す。通常、数十本 ~ 百数十本の導線の組で構成されます。 単純な言 t 算機では、 1 つのシステムバスに、 CPU 、メモ リ、 I/O インターフェイスなどすべてカ続されていま す ( 図 1 ) 。昔はこれが普通で、 Sun1 と初期の Sun2 は Multibus 上に作られていました。写真 12 は Sun2 の Multibus カードゲージで、下に取り出されているのが CPU ポードで、中央にモトローラの 68010 が見えます。 8 こんな日本語を知っている人は、年寄り ! ? 94 UNIX MAGAZINE 1992.12
UN Ⅸへの招待⑩ 4 5 6 7 8 16 17 18 19 20 21 22 23 set history=64 savehist=64 set notify endif alias setenv setenv setenv setenv setenv setenv term alias ' set Ⅱ 0g10b ; eval 'tset —Qsn {\char' 134 } ! * ( ; unset noglob' TEXINPUTS ” . :macros : $HOME/1ib/tex: /usr/local/lib/tex" BIBINPUTS " . : $HOME/1ib/tex: /usr/local/lib/tex/inputs" TEXBIB " . :$HOME/1ib/tex : /usr/local/lib/tex/inputs" SYS_CODE euc LANG j apanese PAGER less 環境変数とは直接関係ない部分もありますが、ついでな のでファイルの内容をざっと説明します。 1 ~ 6 行目の、 if ( $?prompt ) then endif は、効率を考えての記述です。シェルは、対話形式の場合 にのみシェル変数 pr 。 mpt を設定します。シェル変数 prompt が設定されていた場合、つまり対話形式の場合は、 必要なシェル変数の設定をおこないます ( 2 ~ 5 行目 ) 。 一方、 prompt が設定されていない場合は、それらを設定 しないようにしています。もちろん、わざわざこういう判 断をせず、どのようなシェルでもこれらのシェル変数か設 定されるようにしておいてもかまいません。しかしこれら は、対話形式で使うときだけ必要なもので、 rsh のように非 対話形式で起動されるシェルでは不要でしよう。これらの 変数を設定する手間と時間がもったいないと考えたので、 このような判断をしているのです。 仕の図では省略していますが ) 7 ~ 16 行目は、工イリア スの設定です。ェイリアスは、 C シェルの起動方法にかか わらす定義しておけは、いつでも同し別名が利用できま す。たとえば、 % rsh ホスト名工イリアスの別名 というようなコマンド実行も可能なわけです。 18 ~ 23 行目が、環境変数の設定です。 rsh コマンドの利 用を考えない場合、環境変数の設定は ~ /. 1 。 g ⅲファイル でおこなってもよいと思えます ( ただし、 X ウインドウ・シ ステムの環境などでは、 /. cshrc に記述する必要が生し 150 ることもあります ) 。しかし前述したように、 rsh によって 実行されるコマンドが環境変数の値を必要とするかもし れません。そのような場合を考慮して、 /. log ⅲではなく /. cshrc に setenv コマンドを記述するのです。 ホームディレクトリを共有している場合 rsh コマンドからは話がちょっとそれてしまいますが、 もうすこし ~ /. cs c の説明を続けましよう。ネットワー ク上に複数のマシンが存在し、お互いにログインできると します。このような場合、どのマシンからログインしても ホームディレクトリは共通である、といった環境か普通に なりつつあります。また、ネットワークにはさまざまな機 種のマシンが接続されていることが多く、マシンごとの環 境も異なるのが実情です。ところがホームディレクトリを 共有していると、どのマシンからログインしても、実行さ れる /. cs c や ~ /. log ⅲはまったく同しものです。この ため、これらのファイルの記述にはもうひと工夫必要にな ります。 たとえは、マシンごとにコマンドが置かれているディレ クトリが違う場合には、変数 path にはマシンそれぞれに ついて異なる値を代入しなければなりません。環境変数に しても、同じ変数に各マシンで違った値を設定するような ケースも考えられます。これらをきちんと設定しなければ、 rsh コマンドによるコマンド実行がうまくおこなえない、 という可能性も出てくるでしよう。次の例は、 4 種類のマ シンで 1 つのホームディレクトリを共有している場合を想 定した /. cshrc の例です。 UNIX MAGAZINE 1992.12
ます。つまり、プログラムのなかに関数呼出しの文が 書いてあったり、いったん変数に代入された関数への ポインタを使って、その関数の呼出しがおこなわれた ときにプログラムの実行が中断されるのです。 この機能は、ある関数が呼び出されているかどうか を確認するのに有効です。確認したい関数名を使って stop ⅲサプコマンドを実行しておけば、その関数に入 るたびに実行が中断されるため、プログラム全体でそ の関数がどのくらい呼び出されているかが分かります。 また、プログラムのなかでバグの潜んでいそうな関数が 判明している場合に、その関数に対してプレークポイン トを設定することもできます。関数が分かっていても、 その関数を呼び出す行番号まで知っていることはあま りありません。その場合は行番号で指定する stop at よりも、関数名を指定する stop in のほうが有効です。 stop ⅲサプコマンドを使った場合には、サプコマン ドを実行した直後の出力や status サプコマンドによる 表示が、これまでの行番号を指定する場合とは異なり ます。 stop in 関数名 というコマンドを実行すると、 ( コマンド番号 ) stop in 関数名 と表示されます。この場合には、指定された関数の最 初の実行文が実行される直前に、プレークポイントが 設定されます ( delete サプコマンドにおけるコマンド 番号の扱いは変わりません ) 。 プレークポイントを設定するときには、条件も指定 できます。これは行番号を指定する stop at 、関数名を 指定する stop ⅲのどちらの場合でも使えます。条件 を指定するには、プレークポイントの指定の後ろに、 if 1 stop at 9 if i に続けて条件を指定します。たとえば、 134 しよう。また、この考え方を拡張したものとして、 のが面倒くさい ) 場合には、この機能を使うとよいで トが有効になると困る ( c 。 nt サプコマンドを発行する ます。もし、変数が正常な値のときにプレークポイン の値が 1 の場合にのみプレークポイントが有効となり とした場合には、 9 行目に到達したときで、なおかっ i stop if 条件 という形式も許されています。この記法を使うと、条 件が成立しないあいだはプログラムの実行を続け、条件 が成立した時点で実行を中断します。これは、とても便 利な機能に思えますが、実際にはそれはど役に立ちませ ん。この機能を使うと、プログラムの実行がとても遅く なってしまいます。これは、プログラムを 1 行実行す るたびに、条件が成立しているかどうかを調べなけれは・ ならないからです。できれば、この st 。 pif という形式 は使わないはうがよいでしよう。 今回は、 dbx のサプコマンドとして、 ・ stop at 行番号 行番号を指定してプレークポイントを設定 ・ stop in 関数名 関数名を指定してプレークポイントを設定 ・ stat us プレークポイントの設定状況を表示 ・ clear プレークポイントを削除 ・ delete コマンド番号 コマンド番号を使ってプレークポイントを削除 ・ delete all すべてのプレークポイントを削除 などを紹介しました。たくさんのサプコマンドが出てき て、ちょっと戸惑ったかもしれませんが、実際に簡単な プログラムのデバッグをしてみると、これらの機能がい かに便利なものかが分かるはすです。 次回は、プログラムが停止しているときに、プレー クポイントで一時中断しながら実行を続けるというや り方だけでなく、より細かな実行制御をおこなう方法 についてお話ししようと思います。 ( いまいすみ・たかし東京工業大学 ) UNIX MAGAZINE 1992.12
おかしくなった原因を究明できます。今回は、このプ レークポイントの設定方法についてお話ししましよう。 プレークポイントの設定 : その 1 デバッガを使う場合には、プレークポイントを設定 することがよくあります。というよりも、プレークポ イントを使ってデバッグするのが普通です。プレーク ポイントとは、、、その段階までプログラムの実行が進ん だときに、実行を一時中断してデバッガのプロンプト に戻る場所 " のことです。プレークポイントを設定し、 そこまで実行してデバッガのプロンプトに戻ることで、 変数の値を確認したり、関数の呼出し履歴がどうなって いるかを調べることができます。プログラムのデバッグ をしていて、、、もうすこし前の様子が分かれば、どうし てプログラムが止まってしまうかが分かったのに " と 思ったことはありませんか。プログラムに適当なプレー クポイントを設定することで、そんな要求を満たすこと ができます。 dbx では、プレークポイントを行単位で設定できま す ( 厳密には行単位ではありませんが、実行文 1 つ 1 つに付けられると考えれはよいでしよう ) 。プレークポ イントの設定には、 dbx のサプコマンドの stop コマン ドを使います。たとえは、 stop at 行番号 とすると、引数に指定した行番号の行にプレークポイン トを設定することができます。論より証拠、例を見てみ ましよう。 DZ—X 流プログラミング 26 今泉貴史 前回と前々回 ( 1992 年 10 ~ 11 月号 ) では、プログ ラムが停止してしまったときに ・どこで停止したか ・そのときの変数の値はどうなっていたか などを調べる方法についてお話ししました。 プログラムが停止したらデバッグをするのはもちろ んですが、停止はしないまでもおかしな値を出力するこ とがあります。このような場合には、これまでの方法で はデバッグができません。プログラムが ( たとえ異常な 値を出したとしても ) 正常に終了するならは、適宜、必 要な箇所にプレークポイントを設定しておいて実行を 強制的に中断し、その時点で変数の値などを調べると、 % cat —n a. c 1 main(argc' argv) 2 int 3 char 5 6 7 8 9 10 11 12 } % dbx a. out Reading symbolic information. Read 40 symbols (dbx) stop at 9 ( 2 ) stop at "/home/directory/src/a. c" : 9 (dbx) run 1 10 argc ; int 1 , sum ; for (i = atoi(* + + argv) ; i く atoi(* + 十 argv) ; i 十十 ) { sum 十 = i ; printf ("%d\n" , sum) ; 129 UNIX MAGAZINE 1992.12
連載 .. / ' UN Ⅸ Communication N0tes¯O うにデバイスを指定すれば、そのテンヾイスに茁妾出力さ れます。 ・ユーサー名 ューサー名を指定した場合、 そのユーサーがログインし ていれは、ログインしている端末にメッセージが出力さ れます。複数のユーサーを指定したい場合は、カンマで ューザー名を続けて言当します。 ・ @ホスト名 このように指定した場合、ホスト名で指定されたホスト の syslogd にメッセージを転送します。 ・ * ( アスタリスク ) ログインしているすべてのユーサーに対してメッセー ン かプロードキャストされます。 コメント 空白行は無視さ # から始まる行はコメントとして認 識されます。 タイムスタンプ タイムスタンプを出力するための facility として mark が用意されています。たとえは、 /dev/console mark. debug という言当をした場合には、 20 分間隔でコンソールに時間 が出力されます。コンソールがタイプライタ端末の場合に はたいへん便利な機能で、時刻を出力してくれるので OS か突然ダウンしたときにカーネルから出されるメッセージ がいつのものかを、このタイムスタンプから知ることがで きます。 syslog. conf の記述トの注意 注意すべき点が 2 つあります。 1 つは、送られてきたメッセージの facility と level に ついて syslog. conf に記述がない場合には、そのメッ セージは捨てられるということです。標準の動作は規定さ れていません。必要な項目はもれなく記述してください。 もう 1 つは、記述された処理はすべておこなわれること です。 たとえば、 . a1ert . a1ert alert user . level を指定し、それに対応する処理を action に記述し ます。 Selector ます selector ですが、 こでは、 facility. level というかたちで fac ⅲ ty と level を . ( ドット ) てつなげ て表します。複数のものを一度に指定するときは ; ( セミ コロン ) でつなげます。また、 ( カンマ ) を用いて fa- cility だけを複旨定することもできます。いくっかの例 をみてみましよう。 kern. debug は、カーネルから debug のレベルで送られてくるメッセ ージを表します。 user . alert ; daemon. alert は、 facility が user で alert のレベルで送られてくるメッ セージと、 facility が daemon で alert のレベルで送ら れてくるメッセージを表します。これとまったく同しメッ セージの不鶤頁をカンマを使って、 user , daemon. alert と言当することもできます。 facility と level のどちらにもワイルドカードを使うこ とができます。これには、 * ( アスタリスク ) を用います。 facility に * を用いた場合、特定の facility は除きたいと いうこともあります。このために特別なレベル none が用 意されています。たとえは、 * . ; user . none とすると、 facility が user 以タ P ) level が err であるメ ツ セージを表します。 Action こでは次のものか記述できます。 ・ファイル名 ファイル名をフルバスで指定します。指定したファイ ルにメッセージか第求されます。 /dev/console のよ /var/log/syslog /var/adm/messages root 41 UNIX MAGAZINE 1992 ユ 2
連載 /UNIX Commurmcation Notes—O 表 2 関数 openlog() て詣定できるオプション オプション LOG_PID L 0 G_NDELAY LOG_CONS 機能 syslogd がメッセージを出力する場合、メッセージの前にプロセス ID を自重加勺にイ寸加します。デーモンなどのデ バッグには便利です。 メッセージが syslogd に送られなかった場合、メッセージをコンソールに出力します。 syslogd がなんらかの理 由て動いていなかった場合にも、メッセージがコンソールに出力されますから、デーモンなどでは便利なオプショ ンです。 syslogd に対してただちにコネクションを開きます。通常は、関数 syslog() か初めて呼はれたときに syslogd と のソケットを設定します。このオプションは、 syslogd に対するソケットのファイル言当子が、かなら夬まっ たものになっていてほしいプログラムでは有用です。 リスト 3 C プログラムからの syslog の不堋 (a) もっとも簡単な不堋方法 #include <syslog. h> main(argc, argv) int argc ; char * argv [ ] ; syslog(LOG-ERR, "%s : sample syslog message\n' (b) facility の諚とオプションの言聢 closelog() ; sample syslog message\n syslog(LOG-ERR, LOG-PID, LOG-USER); openlog( " sample " #include <syslog. h> argv [0]) ; ますリスト 3(a) を見てください。 syslog を使うために は syslog. h をインクルードする必要があります。 facil- ity や level の定数は、 syslog. h で定義されているから です。これも、 1 度は内容を見ておいてください。このプ ログラムでは、 level が err のメッセージを syslog に送っ 44 ています。何も指定のない場合は、 facility は user にな ります。 facility を変更したい場合は、関数 openlog() を利用 します。リスト 3(b) にその使い方を示します。 関数 openlog() は 3 つの引数をとります。 第 1 引数は名前です。ここに指定した名前は syslog に よって自重加勺にメッセージの前に付けられます。プログラ ム名などをここに指定しておくと便利です。 第 2 引数はオプションです。何もオプションを指定し ない場合は 0 を書いておきます。この例では LOG ー p 工 D を 指定しています。 LOG-P 工 D を指定すると、指定したメッ セージの則にメッセージを送ってきたプロセスのプロセス ID を付けて出力します。指定できるオプションを表 2 に まとめておきます。これらのオプションはピットフィー ルドで表されていますから、複数のオプションを指定する ときには、 LOG_NDELAY ー LOG_PID のようにコ ( 論理和 ) を使って複数のオプションを指定し ます。表 2 は一ヨ麺勺なオプションですが、 OS によっては これ以外にもオプションが用意されています。詳しくは、 マニュアルページを参照してください。 第 3 引数は、 facility 窈旨定をします。たとえば facil- ity を local() に変更したい場合には、 LOG-LOCALO を指 定します。 facility を指定する定数は、 syslog ・ h に指定 されているので参照してください。 関数 closelog() は、現在使用しているソケットを解放 します。 PerI プログラムからの利用 PerI からの利用もたいへん簡単です。 PerI では syslog を利用するためのパッケージ syslog ・ pl が用意されてい UNIX MAGAZINE 1992 ユ 2
連載続ウインドウ・システムについて一⑥ ビジュアルの表現形式 60 沿うものかどうかは、以下のポイントにより判断すること デフォルト・ピジュアルがアプリケーションの要望に ト・ピジュアルの XVisuaIInfo 構造体を取得する。 このために、図 6 に示すような処理をおこない、デフォル 使える場合は、それを使ったほうがなにかと便利である。 トされていることもあるが、デフォルト・ピジュアルが 必要がある。スクリーンでは、複数のビジュアルがサポー ジュアルが、自分の望むものと一致するかどうかを調べる フォルト・ピジュアル、つまりルート・ウインドウのピ アプリケーションは、ます接続されたスクリーンのデ デフォルト・ビジュアルの確認 することはたやすい。 allnfo 構造体を得てしまえば、ほかの表現形式を利用 構造体へのポインタが含まれているため、 1 度 XVisu- おこなう。この構造体には、 Visual ID および Visual 索する場合は、かならす XVisuaIInfo 構造体を通して ション・コードでは、ビジュアルの内容を石忍したり検 ン・コードから参照する場合に使用する。アプリケー ビジュアルに含まれるデータや清報を、アプリケーショ XVisuaIInfo 豈イ本 指定する場合に使用する。 とアプリケーション・コードのあいだでピジュアルを が、情報隠蔽された不透明な型として扱われる。 XIib では、 Visual 構造体へのホインタとしてアクセスする XIib でのビジュアルの表現である。アプリケーション VisuaI 本髄イ本 を使う必要がある。 コルを通してピジュアルを指定する場合は、 VisuaI ID ID 型が使われる ( 実際は unsigned long) 。 X プロト 識別するための資源識別子である。型としては VisuaI X サーバー側 ( ゴ尉寺されている、ピジュアルの本体を Visual ID ので、これらの違いをきちんと把握しておく必要がある。 XIib では、ビジュアルは 3 通りの表現でアクセスされる ポートしているビジュアルの一覧を参照することになる。 クリーンのデフォルト・ピジュアルと、スクリーンでサ 接続されたスクリーンのビジュアルを石忍するには、ス になる。 ・ピジュアル・クラスか望みのものと一致するかどうか。 ・ビジュアルの深さが十分か ・ピジュアルでサポートされるカラーマップのエントリ数 が - ト分か デフォルト・ピジュアルか望みのものと一致した場合 は、そのままデフォルト・ピジュアルを使うものとして、 次のステッフ ( カラーマップの石忍および選へ進む。 そうでない場合は、はかのビジュアルを使うかアプリケー ションの続行をあきらめるかを尺する必要がある。 ほかのビジュアルの確認 デフォルト・ピジュアル以外にサポートされているは かのピジュアルについても、上記と同様にそれらの XV- isuallnfo 構造体を取得し、条件に合うものがあるかどう かを調べることになる。この用途には、 XMatchVisu- allnfo() を使用するとよいだろう。 現実的には、次のような理由から、デフォルト・ピジュ アル以タ V ) ビジュアルお尺することはますないだろうと 考えられる。 カラーマップは、ビジュアルに関連づけられるので、異 Screen() マクロで調べられる ) はたかだか 1 つである。 の数 (MaxCmapOfScreen() および MinCmapOf- ドウェアでは、同時にインストールできるカラーマップ 2. 現在、一殳に出回っている大半のディスプレイ・ハー で、当然表示できる色の分解能ははるかに悪くなる。 をあらかじめ適切に設定しておいてエミュレートするの しそれは、 8 ビットの PseudoCoIor のカラーマッフ ジュアルとしては TrueCoIor も用意されている。しか のハードウェアは、 8 ピットの PseudoColor だが、ピ ない可能が大きい。たとえは、 SPARCstation 2 GX ースでは、けっきよくほかのビジュアルでも要望に合わ アルでアプリケーションの要望に応えられないというケ っていると考えられる。したがって、デフォルト・ピジュ ードウェアの機能を使ってエミュレートできるようにな など ) になっているはすで、それ以、タ ) ピジュアルはハ 限に替軍できるパラメータ ( ピジュアル・クラス、深さ ーン ( ディスプレイ・ハードウェア ) がもつ能力を最大 1. たいていの場合、デフォルト・ピジュアルはそのスクリ UNIX MAGAZINE 1992.12
連載 /UNIX Communcation Notes 表 1 syslogd のオプション オプション 機能 テンヾッグモード。 syslog ・ conf を読み込んだ結果や、 syslogd か扱うすべてのメッセージを表示します。デー モンモードでは動いていないので、 CTRL-C で終了できます。 syslog. conf のチェックなどに有用です。 コンフィギュレーション・ファイルを指定できます。通常はコンフィギュレーション・ファイルとして / etc / syslog. conf を使用します。はかのファイルをコンフィギュレーション・ファイルとして利用したい場合に使 います。 mark によって出力される日駭ー購報の出力間隔を指定します。単位は分。通常は 20 分おきに日骸リカ咄力されます。 にして送ります。 # kill —TERM ( cat /etc/syslogd ・ pid' -fconf —mval ・ 13 行目 sendmail 関係のメッセージの多くは、 facility が mail 、 level が debug で送られてきます。この行のよ うな記述をすることで sendmail の通信のログをとる ことができます。 ・ 15 行目 facility が auth のメッセージはすべてホスト logmas- ter に転送しています。 syslog の利用 UNIX で syslog を使っているのは、カーネル、 send- mail や routed といったデーモンプロセスがはとんどで す。しかし、一ヨ財リ用者も簡単に syslog を使うことがで きます。これには、以下のような場合が考えられます。 syslogd の起動 ・デーモンなどの制御端末をもたないプログラム syslogd は標準で rc. local によって起動されます。 (ioctl( ) で TIOCNOTTY を指定して制御端末をな syslogd にはいくつかのオプションがあります。オプ くす ) を開発したときに、デバッグ情報や利用者のロ ションを表 1 にまとめておきます。 グをとりたい場合。制御端末をもたないデーモンでは、 オプションのうち、テンヾッグオプション (-d) は sys- 標準出力や標準ェラー出力に出力しても何も表示されな logd のコンフィギュレーション・ファイルの読込みと、 いので、 syslog を使ってデータをとります。 重川や伏況を知るのにイ甦リです。とくに、 syslog. conf の 描丘は、タイプライタ端末をコンソールに使うことはめ 己述を大幅に変更した場合などは、 1 度はデバッグオプ ったにないので、 /dev/console にメッセージを出力 ノョンを利用して内容を石忍するほうがよいでしよう。デ するプログラムでは言求がとれません。そこで、 syslog バッグモードのときは制御端末を切り離さずに動作しま を使ってファイルに言当求をとるようにします。 すから、キーポードから割込みシグナルを送る ( 通常は syslog はごく手軽に利用できます。次に C プログラム CTRL-C を押す ) ことで終了できます。 syslog ・ conf と Perl からの利用について説明します。 の記述内容が正しいことを石忍したら、テンヾッグオプショ C プログラムからの利用 ンを付けすに再起動しておきます。 facility として mark を使用している場合は、タイム C プログラムから利用する場合は、関数 syslog() を使 スタンプの間隔をオプション (-m) で変更することかでき います。 ます。 関数 syslog() は、第 1 引数としてメッセージの level syslog. conf を再度読み込むには、 syslogd に対して を指定します。第 2 引数以降は、 printf() などと同じで SIGHUP(I) を以下のようにして送ります。 メッセージ・フォーマットと、参照している変数リスト を指定します。加をフォーマットで使用すると、直前に # kill —HUP ( cat /etc/syslogd. pid' 発生したエラーに対応したメッセージ (errno から得る ) に置き換えられます。システムコールなどのエラーを表示 停止させたい場合には、 SIGTERM(15) を以下のよう するときに便利です。 一三ロ、、 43 UNIX MAGAZINE 1992.12