S 就 Up lPv6 なさあつなこうグローバル 6bone へ ! 大江将史 ー・ -- - ーふとしたことで T21 一 -- ・ - ・一 写真 1 ThinkPad T21 と T20 、 それと 1620 三三三論ニ 私の所属する研究室では IBM のノート PC がたいへ ん多いのですが、さらに数台の ThinkPad か加わりまし た。新たに加わったのは、 ThinkPad X20 と ThinkPad T21 ( 2647 ー 9AJ 。 SXGA 十液品、 1 , 400 x 1 050 ) です。 研究室のポスも同し T21 を入手し、私も運よく別の経路 で T21 を使う機会を得ました ( 写真 1 ) 。 T21 は、私がふだん使っている T20 と、ディスフレ イやサウンド、ネットワークなどの本体のノ、一ドウェア構 T21 の SXGA 十 成がよく似ています。 T20 からディスクドライプを外し て T21 に付けるだけでイ吏えそうだったので、付け替えて Pentium III 1GHz をイ吏用した ThinkPad T22 が発 みました。すると、ほとんど手間をかけすに移行できまし 表されて、 た ( 面倒な OS のインストールやデータ中幻はおこないま 「ついにノートでも 1 0()0MHz 突入か・・・・・・」 せんでした ) 。 罸にに取り残されていく自分を感しつつ、新しくやって OS については、 NetBSD はまったく間題なく移行でき きた ThinkPad T21 を使ってみました。 ています。 SXGA 十用に XF86Config を更新したくらい ・最大の差は、これまで使っていた T20 が 1 , 024 x 768 で、とても簡単でした。 Windows 2000 では、 SXGA 十 (XGA) の解像度の液品であったのに対し、 T21 2647 ー をサポートしたディスプレイ・ドライバ周りの更新が必要 9AJ と 5AJ は、 14.1 インチで埆早像度が 1 , 400 x 1 , 050 でしたが、これは付属のドライバ CD によって難なくす (SXGA 十 ) の TFT 液品です 1 。 CPU 速度やメモリより み、 T20 から T21 へ不子するのに 30 分もかかりません も、見えるだけにインパクトがあります 2 。 でした。これはマイナー互換匪のいいところです逆に 1 , 400 >< 1050 ということは、当然ながら 1280 x いえは、解伽隻以外は代わり映えしないということです。 1 , 024 (SXGA) よりも高いんですよ。よって、 IBM は 一方ポスはというと、愛しの東芝の Tecra8000 十 この解像度を SXGA 十と表現しています。 FreeBSD 3.5.1 十 PAO 工竟から T21 十 FreeBSD 4.2 への移行を試みていますが、音か鴫らないなど、苦労して 1 去斤の T22 2647-5EJ / 9EJ も 14.1 インチの SXGA 十の TFT いるようてす。どこか大変だったかというと・・ 、いけま 液品です。さらなる強者は DELL の lnspiron 8000 シリーズで、 UXGA ( 1 , 600 x 1 , 200 ) のモデルがあります。もう、鬼ですな。 せん、このまま熱く語り出すと、肝腎の IPv6 のことを忘 2 VGA が 640 x 480 、 SVGA が 800 x 600 、 XGA が 1 , 024 x れてしまいそうです。この説明は最後にまわしましよう。 768 、 SXGA が 1 , 280 X 1 , 024 、 SXGA 十が 1 , 400 X 1 , 050 、 UXGA が 1 , 600 x 1 , 200 、 QXGA が 2 , 048 x 1 , 536 てす。 87 UNIX MAGAZINE 2001.6
mib という名前の整数の配列に、変数に対応する整数の 並びをオ巒内し、それを使って値を取得します。現在日骸リか らシステムか起動した日該リを引けば、システムか起動して いる時間か計算できます。 システムの負荷を得るためのコードは次のようになって います。 if (getloadavg (avenrun , sizeof (avenrun) / - sizeof (avenrun[O] ) ) (void)printf ( " , Ⅱ 0 load average - information available\n") ; (void)printf ( " load averages: " ) ; for (i = 0 ; i く (sizeof(avenrun) / - sizeof (avenrun[O] ) ) ; i + + ) (void)printf ("%s %. 2f't avenrun [i] ) ; (void)printf("\n") ; avenrun は double 型の要素数 3 つの配列です。この コードを実行すると、 avenrun には 1 分、 5 分、 15 分 の負荷の平均値かオ褓内されます。 getloadavg の呼出しで は、かならすしも 3 つの値を取得しなけれはならないわけ ではありません。第 2 引数として必喫な値の数を指定でき ます。この例にあるように、酉冽全体の大きさを配列の要 素の大きさで割れば、要素の個数は簡単に求めることがで きます。 w コマンドの先頭行の出力は uptime コマンドと同し = 0 ) else { if ( (u = strrchr(s , ド名本がファイル名と角 ( できます。 けた位置の後ろを指します。 / がみつからなけれはコマン 、、 / " がみつかれは、その後ろがファイル名になるのでみつ return ( ー 1 ) ; return ( 0 ) ; if (strcmp(u, "uptime") else です。しつは、これらは同一のコマンドです。つまり、同 し実行可能形式のファイルを指しています。 FreeBSD% ls —li /usr/bin/w /usr/bin/uptime 8144 —r—xr—xr—x 2 て 00t wheel 11772 11 / 20 21 : 02 /usr/bin/uptime 8144 —r—xr—xr—x 2 て 00t wheel 11772 11 / 20 21 : 02 /usr/bin/w FreeBSD% 86 最後のファイル名の部分を切り出します。後ろから調べて 関数自体はごく簡単で、 strrchr などによりパス名から には一 1 を返します。 コマンドとして実行された場合には 0 を、それ以外の場合 この関数はコマンド名を引数にとり、コマンドが uptime イルの最後で定義されている this-is-uptime 関数です。 とが分かります。この違いを生み出しているのが w. c ファ ド番号か 1 司ーなので、同しファイルの実体を指しているこ ls コマンドに一 i オフションを付けて実行すると、 i ノー 取り出したファイル名の部分が uptime という文字列 かどうかを調べることで、 uptime コマンドかどうかを決 定できます。 w コマンドと uptime コマンドのように、自 身のコマンド名によってその重川か変わるコマンドはすで にいくつカ呂介しました。意外に多くのコマンドがこのよ うな動作をしているので、すこし驚いたのではないでしょ うか。 ☆ 今回は、システムを利用しているユーサーの情報を得る という点に注目し、 utmp ファイルとそれを利用するコマ ンドを紹介しました。 utmp ファイルの内容を利用するという意味では、 who コマンドか基本となりますが、はかにも users コマンド、 w コマンドなどをとりあげました。とくに w コマンドで は、たんに utmp の内容を表小するだけでなく、 4 月号で も紹介した kvm-getprocs を使ってプロセスの情報を取 得し、 utmp の内容とプロセスの情報を組み合わせて出力 します。さらに、 w コマンドカ咄力するコマンドの選択方 法も説明しました。 プロセスの内容などはカーネルに問い合わせないと取得 できないのに対し、ユーザーに関する情報はファイルシス テム上のファイルに県存されています。それだけセキュリ ティ上の危険が少ない情報だということでしようか・ ( たしみ・ひさかす ) UNIX MAGAZINE 2001.6
しよう。 ehead カ甘茆のがもとの線形リストです。これを いったん from 変数にオ褓内し、 ehead 自体は空のリストに します。あとの処理は、もとのリストの各要素についてお こないます。具イ勺には、 from カ甘旨すリストのそれぞれ の要素を新たに作成しているリストのどの位置に挿入すべ きかを調べながら、順番に挿入していきます。こうして、 もとのリストとは別のリストを作りながらデータをソート しています。 from ehead ; ehe ad = NULL ; while (from ! = NULL) { for (nextp = &ehead ; (*nextp) & & from->idle > = (*nextp)—>idle ; nextp = &(*nextp) —>next) continue ; from = from—>next ; save—>next *nextp ; *nextp = ; プログラムの真ん中あたりにある for 文に注目してくだ さい。この for 文の本体は continue 文だけです。つま り、本体には実行文がありません。このような場合には空 文を用いることが多いのですが、このプログラムの作者は continue 文を使っています。 continue 文を用いること こに 1 つの文か有在することになり、空文を使う場 で、 合よりもみやすくなると考えたためでしよう。 w コマンドの出力を見ると分かりますが、知頁行では現 在時刻、システムか起動してからの経」鄙間、ログインし ているユーサー数、負荷の勺値などか表示されます。 れらの値はカーネルから取得します。システムか起動した 日該リは sysctl によって、システムの平均負荷の値は専用 の関数 getloadavg により取得しています。 システムか起動した時刻は、 CTL-KERN の KERN- BOOTTIME という変数にオ内されています。これを取 SC 翡 好評発売中 ! Java プログラミング・ノート 国際化と 日本語処理 CAFE BABE uNIX 風問一洋 国際化と日本語処理 プログラミング・ノート ava ・本体 3 , 000 円十税 ・ ISBN 4-7561-3481-5 ・ A5 判、 312 ページ ・風間一洋著 Run Anywhere" を目指すプログラマー 解説する。真の意味での "Write Once, サンプル・プログラムを示しながら平易に プログラミングに必須の知識を数多くの Java による日本語処理、さらには国際化 目次から に最適の 1 冊。 1 章 2 章 3 章 4 章 5 章 6 章 7 章 8 章 9 章 10 章 1 1 章 12 章 付録 Java はどんな言語か 国際化と地域イヒ Unicode ロケー丿レ 工ンコーティング タイムゾーン リソース / ヾンド丿レ フォーマット出力と解析 文字列の比較 テキストの境界解析 インブットメソッド 文字の表示 Unicode プロック / ロケール一覧 / 工ンコーティング名一覧 / タイムゾーン D ユーロ通貨記号への対応 得しているコードは次の部分です。 mib [ 0 ] = CTL—KERN ; mib [ 1 ] = KERN—BOOTTIME ; size = sizeof (boottime) ; if (sysctl(mib, 2 , &boottime, boottime . tv—sec ! = 0 ) { UNIX MAGAZINE 2001.6 一覧 / &size, NULL , 0 ) 株式会社アスキー 85 電話 ( 08 ) 535 ト 8 ] 94 出版営業部 〒 1 5 ト 8024 東京都渋谷区代々木 4 ー 33 ー ] O