指定 - みる会図書館


検索対象: UNIX MAGAZINE 1991年9月号
91件見つかりました。

1. UNIX MAGAZINE 1991年9月号

LJN Ⅸ流プロクラミング 11 int char FILE **argv ; *fp; if (argc ← 1 ) { cat (stdin) ; } else { while (——argc > 0 ) { if ((fp = fopen(* + + argv, cat (fp) ; fclose(fp) ; } else { fprintf (stderr, "Can't open %s\n" *argv) ; exit(O) ; *fp; FILE int while ()c = getc(fp)) ! = EOF) { putchar (c) ; ます、後半の cat 関数から見てみましよう。これは、 指定されたファイルポインタが指すファイルの内容を 標準出力に出力する関数です。この部分は、 getchar() の代わりに getc(fp) を用いていることを除けば 1990 年 11 月号の cat プログラムの main 関数と変わりあ りません。つまり、 getchar() で標準入力から文字を 読み込むのと getc() でファイルポインタを指定してそ のファイルから文字を読み込むのは同じことなのです。 getc() にファイルポインタとして stdin を指定すれば、 getchar() とまったく同様に動作します。 間題は main 関数のほうです。ます、引数の数をチ 表 1 fopen に対する第 2 引数 fopen に渡す引数 r 十 w 十 a 十 オープンしたファイルの状態 元のまま 消える 元のまま 元のまま 消える 元のまま ファイルのなかの指している位置 先頭 先頭 最後 先頭 最後 読込みができるか 〇 〇 〇 〇 書込みができるか 〇 〇 〇 〇 〇 ェックしています。引数が 1 以下 つまり、コマ ンド行で引数が何も指定されないと、標準入力を引数と して cat 関数か呼び出されます。一方、コマンド行で 引数か指定された場合には、その引数が存在するあいだ while でループしながらそれぞれの引数に関する処理を おこなっています。この処理は、ファイルをオープン し、返されたファイルポインタを使って cat 関数を呼 び出し、出力カ鮗ればそのファイルポインタをクローズ するというものです。これで目的のプログラムが作成で きました。 この例で注意してほしいのは、ファイルをオープンし 136 UNIX MAGAZINE 1991.9

2. UNIX MAGAZINE 1991年9月号

LJN Ⅸ流プログラミング 11 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 break ; break; break ・ fclose(fp) ; printf ("a %s\nb = %s\nc "off" 0 Ⅱ ” off ” C ? 0 Ⅱ exit(O) ; いかがですか ? ファイルポインタを得るまでの処理 グラムを終了します ( 17 行目 ) 。 20 ~ 25 行目では得られ がやや長いので見かけはすこし違いますが、基本的には たホームディレクトリにファイル名をつなぎ、ファイル 前号のシェルのプログラムと同しことをしています。 を読込みのモードでオープンしています。この場合も、 オープンできたかどうかを検査していますね。このよう では、プログラムを順番に見ていきましよう。最初の にエラーを返すことがある関数を呼び出すときは、かな include の行は、プログラムのなかで NULL や EOF らず工ラーの検査をおこなうように心掛けましよう。 などの値を使用するために指定しています。次の define 27 ~ 39 行目の while 文の処理が実際にオプションを の行は、ファイル名をイ尉寺するための配列の長さを定義 設疋している部分です。ファイルのなかに書かれた文字 するものです。この配列の長さはユーザーのホームディ それぞれに対してループし、 a 、 b 、 c のいすれかの場合 レクトリのパス名によって異なりますが、普通は 256 も には対応する変数の値を真 ( 1 ) に設定しています。 あれば十分でしよう。どんな状況でも動作するプログラ EA . ′ ~ → 取に printf でそれぞれのオプションの値を出力し、 ムにしたいのなら、この値では十分とはいえないかもし プログラムは終了しています。 れません。しかし、 C 言語でそれを実現しようとすると ファイルの位置を指定するためにすこし面倒なこと ちょっと複雑になってしまうので、今回はこれでよしと をしていますが、お分かりいただけたでしようか。あと しておきましよう。 は、このファイルに書かれた文字を角斤する部分を要求 さてプログラム本体ですが、最初は変数の宣言です。 に沿って手直しすればいいのです。 7 ~ 9 行目 (a 、 b 、 c の宣言 ) では、各オプションの値 を一尉寺するための変数を宣言しています。それらのオプ 書式つきの入力ー scanf() ションは、デフォルトでは偽 ( 0 ) になるように初期設定 されています。 11 行目の fp はファイルポインタで、オ 「プログラムは簡単にしたいが、もうすこし体裁よくオ フションの設定か書かれているファイルをオープンする フションの設定を書きたい」というなら、 fscanf 関数を ために使います。 12 ~ 13 行目の buf と ptr はそのファ 使うこともできます。この関数は、簡単にいうと fprintf イルのパス名を得るために、 14 行目の ch はファイルの の逆の操作をおこなうものです。 fprintf は、指定され 中身を読むときに使います。 たファイルポインタの指す先へ書式を指定して文字列を プログラム本体では、ますホームディレクトリの位置 書き込みます。これに対し、 fscanf は指定されたファイ を竟変数 HOME から得ています ( 16 行目 ) 。この値 ルポインタの指す先から書式を指定して文字列を読み込 か得られない場合は、エラーメッセージを出力してプロ みます。次のプログラムを見てください。 138 UNIX MAGAZINE 1991.9

3. UNIX MAGAZINE 1991年9月号

連載 /UNIX Communication Notes 例外の指定です。例を挙げておきます。 READ=/var/sp001/uucppub1ic : /pub ・ WRITE NOREAD=/pub/etc リモートシステムからファイルを受信したとき、書込み を許すディレクトリを列挙します。 WRITE = 市 : イレ 2 : . 指定したディレクトリの子孫のサプディレクトリにある ファイルも書込みを許します。もちろん、ファイルやデ ィレクトリの保護モードが uucp の権限で書き込めるよ うになっていなければ、こで許可しても書込みはでき ません。 * WRITE = /usr/ spool/uucppublic * WRITE =/var/spool/uucppublic (SunOS など、ス コールバックはおこないません。 * CALLBACK = no コールバックをおこないます。 CALLBACK = yes ・ CALLBAC K WRITE = の設定に対する例外の指定です。 NOWRITE = 市 : 市 2 : . ・ N 〇 WRITE プールが /var に置かれているシステム ) 信はまったくおこなわれなくなってしまいます。気をつ うと、電話を交に延々とかけなおすはかりで実際の通 双方のシステムで CALLBACK = yes を設定してしま み意味をもちます。 CALLBACK は、 L 〇 GNAME = 工ントリのある行での すこちらが負担したい ) というときに使用する機能です。 転送は希望するが着信はしたくない ( 電話料金はかなら ムがファイル転送の処理をおこないたいと思った場合、 らかけなおすことです。通常は使いません。相手システ 、、コールバック〃とは、 1 度電話を切って改めてこちらか * COMMANDS = rmail (SunOS) COMMANDS = c 襯盟 : c 〃 2 : . 実行を許すコマンドを列挙します。 ・ C 〇 MMANDS けてください。 60 固定です。これを変えるためには、おそらくソースから usr/bin 、 SystemV R3 では /bin:/usr/bin:/usr/lbin に コマンドのサーチパスは、 SunOS 4.1. * では / b ⅲ : / コンパイルしなおす必要があるでしよう。 サーチパス上にないコマンドの実行を許したいときには、 コマンド名ではなくパス名を記述します。たとえば、 COPMANDS=ma11 : /usr/local/bin/rnews と書くと、 rnews を実行するときには、 /bin や /usr/bin に rnews があっても /usr/local/bin/rnews が実行さ れます。コマンド名として A 乢と書くと、すべてのコマ ンドの実行を許可します。これはきわめて危険なので、 同一組織の信用できるシステムに対する場合以外は避け るべきです。 UUCP には中継機能もあります。たとえば、 madoka の ューザーが、 % uucp myfile nadia\ ! ma 取土 \ ! -uucp とすれば、直接接続してはいない manami に nadia 経 由でファイルを送ることができます。ただし、そのため にはあいだに入る nadia が C 〇 MMANDS = のなかで uucp の実行を許す設定にしておく必要があります。 ・ VALID ATE 接続を許すホストを列挙します。指定する際には、同し 行の LOGNAME = で指定したログイン名を使います。 VALIDATE = ん os ″ : ん os / 2 : . ・ MYNAME ローカルシステムの UUCP のノード名として、 名以外のものを使用するための指定です。 MYNAME = 〃川召 ホスト ゲートウェイのリプレースによってホスト名が変史され た場合や、ホストの命名に内規があって好きな名前がつ けられないときに便利です。 HoneyDanBer UUCP では、本当のホスト名が 6 文字 あるいは 7 文字を超える場合、超えたぶんは切り捨てら れて UUCP のシステム名が作られます。しかし、 UUCP のバージョンによって有効最大長が異なります。混乱を 避けるためには、 6 文字以下の名前で運用したほうが安 全です。このためにも、 MYNAME = の指定は有用です。 たとえは、ゲートウェイの UUCP 名を組織名 / 部署名 + gw/gwy にするには、 UNIX MAGAZINE 1991.9

4. UNIX MAGAZINE 1991年9月号

リアルタイムと UNIXÄ 点で過剰な I / O や割込みが原因でまだプロセスが動いて いたら、それは次のサイクルのスタートをキャンセルし、 終了する。 すべてのタスクは完了し、各サイクルにはいくらかのア イドル状態ができるはすである、というのがその原則であ る。しかし何か重要な活動が起きたときには、システムは それを完了する。 こでは、最初のアポロ月着陸時に起き た状況は回避されている。 HAL/S SCI-EDULE 丑 0R0 ON RUPTO PRIORITY ( 22 ) を使って非同期割込み処理を指定することも可能である。 原則を実装することができるし、さらに SCHEDULE 文 ックを条件っきで停止することができる。この方法で巡回 をみるためには、 TERMINATE 文を使ってタスクプロ 期も短い。 RG2 、 RG3 がそれに続く。予定の割込みや時間 レートグループ 1 (RGI) の優先順位がもっとも高く、周 SCHEDULE RG3 PRIORITY ( 8 ) , REPEAT EVERY 2. / 3. ・ SCHEDULE RG2 PRIORITY ( 11 ) , REPEAT EVERY 12. / 90. ・ SCHEI)ULE RGI PRIORITY ( 12 ) , REPEAT EVERY 6. / 90. ・ を見てみよう。 つの周期サイクルをもっている。次の HAL / S プログラム オの姿勢制御システムは、、、レートグループ〃と呼ばれる 3 て設定可能なタスクセットも含められる。たとえは・ガリレ HAL プログラムのなかのプロックには、グループとし ある。 ルタイムに欠かせない文など、いくつかの魅力的な特徴か SCHEDULE 、 PRIORITY 、 TERMINATE などのリア ではない ) を使うべクトル方程式の自動リストや、 WAIT 、 リプトとサプスクリプト ( ラインプリンタでの芸当のこと PL / I 〃などと呼ぶ人もいるが、 HAL / S にはスーパースク されている。工ンジニアのなかには不遜にも、、フライト トルやガリレオの姿勢制御システム・コンピュータに採用 1960 年代後半に NASA が指定した HAL/S は、シャ や Ada などである。 ーリング構造を活用する言語ツールが登場した。 HAL/S ングのいくっかの問題を助けると同時に、前述のスケジュ ステムが成長するにつれ、アプリケーション・プログラミ 1960 年代から 70 年代にかけて多くのリアルタイム・シ 78 この文は RUPTO が発生したときに ERRORO ルーチ ンを例示するような監視を表している。 22 という優先順位 はさきに挙げた 3 サイクルのどのタスクよりも高いた め、 RUPTO は処理資源を掌握して確実に ERRORO と なる。 Ada UNIX MAGAZINE 1991.9 ワークを構築するようプログラムできる。 のがここで説明したモデルと同様な方法でタスクのネット マーやほかのデータ割込みを認め、最終的に実行されるも 慎重に測定することである。一定の重要なタスクにはタイ が確実に指定した間隔でサーピスされるよう実行時間を わりに SELECT などの Ada 文を使い、すべてのタスク つは、単純にそれを使うのをやめ、セマフォを実装する代 pragma PRIORITY の抱える問題を避ける方法の 1 ーション・プログラマーには扱いにくい。 倒置〃の概念は、より厳格な方法に馴染んできたアプリケ クと結びつくことで処理資源を穫得する、、プライオリティ の待合せよりも優先される。ごく低位のタスクが高位タス を試みた場合、その組はそれぞれの優先順位が 5 のタスク という優先順位のタスクが優先順位 1 のタスクと待合せ もっとも高い優先順位のタスクがある組である。つまり 10 合せを試みているとすると、そのなかで最優先されるのは 位を割り当てることが可能だ。いくつかの組のタスクが待 pragma PRIORITY をもっている。各タスクには優先順 Ada は、プライオリティをプリミテイプに指定できる た事態は起こりうる。 つのプロセッサが複数のタスクを実行していれは、そうし なるのを防げる、という印象をもたれるかもしれない。 1 待合せの準備ができてもタスクがプロックされたままに り、それによってパートナーの 1 つがデータ交換のための それぞれのタスクが独自のプロセッサを保有することにあ この言語のコンセプトの背景にある本質的な考え方は、 れるか、もしくは明示的に中断されるまで実行される。 スクは、別のタスクからのデータを待つあいだプロックさ ーケンシャルなプロセスを中心に構成される。 Ada の各タ には馴染みにくいものである。このモデルは、通信するシ いている。それはリアルタイムのべテラン・プログラマー のまま継承しているのに対し、 Ada は別のモデルにもとづ HAL/S が、、伝統的〃なリアルタイムのコンセプトをそ

5. UNIX MAGAZINE 1991年9月号

連載 /UNIX Communication Notes AnY2000-0700 クとしなければなりません。 と書くと、平日の昼間はグレード N ( デフォルト ) 以上のジ nadia WK1900 ー 0700 ,Su, Sa ・ nadia Any/N ・ たとえば、 ドより小さなグレードのジョブの転送はおこなわれません。 か 1 文字です。ここでグレードを指定すると、そのグレー したが、正確には「数字、英小文字、英大文字」のいすれ ョブの優先順位 ( グレード ) は 1 文字で表されると書きま ッシュで区切ります。前回、 HoneyDanBer UUCP のジ もう 1 つのサプフィールドーージョブのグレードはスラ す。ェラーが連続して起きても 30 分のままです。 この例では、次の呼出しまで最低 30 分の間隔をおきま Any ; 30 呼出し自粛時間がそれに固定されます。 ォルトの働きですが、サプフィールドで間隔を指定すると、 どん増やし、最大 23 時間は呼出しを控えます。これがデフ 出しません。工ラーが連続して起こると、この間隔をどん ってもおそらくできないであろうと考えて、 5 分間は呼び ラーが起きて異常終了した場合、直後に再呼出しをおこな 時間を指定します。呼出しに失敗したときや、通信中に工 リトライ間隔のサプフィールドは、エラー後の呼出し禁止 ョブの処理だけがおこなわれます。 7 勤召 ( 仇流の 通信に使用するデバイスを指定します。ここではデバイ スの抽象的な名前を指定し、具体的な名前 ( デバイスファイ ル名など ) は Devices ファイルの記述を参照します。ま た、使用するプトロコルはここでも限定できます。詳細は 則号の 86 ページ、 Devices の説明のうち「プロトコル指 定」の項を参照してください。 ・ CIass ( e 記 ) 回線速度を書きます。 Any と書くと乃加だけで Devices を検索します。 Devices にも Any と書いてある と、 1 , 200bps になってしまいますから注意が必要です。 、 \Devices には Any と書かないクとか、、、 Systems には Any と書かない〃など自分なりの方針をきちんと決めてお いたほうがいいでしよう。 回線速度としては、速度だけでなく、、 T9600 〃のように 文字を 1 つ含むこともできます。これは、同一速度の 2 っ のモデムを区別したいときのための機能です。 ・ん 0 e ダイアラに渡すトークンです。モデムの場合は電話番号 直結回線の場合は電話番号がありませんから、マイナス ログインするためのやり取りを記述します。 ・ Expect-send になります。 を書きます。たとえば、 \r\c ogin: ーー 0g1 Ⅱ : uumadoka ssword: nadia Any nadia 9600 ー " " というふうになります。 TCP の場合は、 Class がポート番号、 P 加怩がホスト名 nadia Any TCP 540 nadia in: ——in : uumadoka word: ummaga ・ u.mmaga 、、、ホスト名 = リモート UUCP システム名 、、、になります。たとえは、 となります。ただし、 C s と勸 0 怩は省略時にはそれぞれ、 ホート番号 = uucp (/etc/services を参照 ) となりますから、 nadia Any TCP でもかまいません。 PermlSSlons in: ーー 1 : uumadoka word: u.rlllnaga れたエントリからなります。 あるいは、ツ〃襯 e = / 怩 7 : / 怩 2 :. 〃という形式で書か システムごとのアクセス許可などの設定をおこないます。 1 行が記述の単位となります。各行は、、、川 e = / 怩〃 58 1 行が長くなりがちなので、 \ を用いた継続行指定も可 能です。以降の説明で、、行′′というのは、継続行を連結し た論理的な行を意味します。 = の前後に空白を入れてはなり UNIX MAGAZINE 1991.9

6. UNIX MAGAZINE 1991年9月号

連載ー / Li 枕 Language mary$ TRACE=—I expr リスト 2 expr の実行時トレース ている手続きの ( ソースファイルの ) 行番号、実行され トレース情報は、ソースコードのファイル名、実行し すべてのトレース情報を出力します。 へ出力するわけです。値に一 1 を指定すると、処理系は 降、 TRACE に指定した数だけトレース情報を stderr ス情報の上限を指定します。 lcon 処理系は実行開始以 この機能を使用するには、環境変数 TRACE にトレー 関係を分かりやすく表示するトレース機能があります。 lcon 処理系には、プログラム実行時の手続きの参照 lcon のトレース機能 main() ( X + 4 ) * 5 e expr expr expr expr expr expr expr expr expr expr e xpr expr e xpr expr expr expr expr expr expr expr expr expr expr . 工 . 1 . 1 . 工 . 1 . 1 . 1 cn . 1 . 1 . 1 cn . 1 . 1 . 1 cn . 1 . 1 . 1 . 1 . 1 . 1 . 1 . 1 cn . 1 . 1 . 1 . 1 . 1 . 1 . 1 . 1 cn . 1 . 1 . 1 . 1 . 1 . 1 . icn . 1 . 1 5 14 29 14 29 37 14 29 37 14 29 14 29 14 19 14 37 14 29 14 29 14 19 14 37 29 14 37 14 29 14 29 14 19 14 37 29 14 6 ・・・変換前の演算式を入力 fix("(x + 4)*5") lassoc failed form(" ( X + 4 ) " fix returned " 4 " ー rassoc failed ー rassoc("4" ” , ) ー lassoc failed ー lassoc failed fix("4") fix returned ー rassoc failed ー rassoc("X" , , ー lassoc failed ー lassoc failed fix("X") form returned " + ( X , 4 ) " lassoc returned " + ( X , 4 ) " fix returned ” 5 " ー rassoc failed ー rassoc("5" , , ー lassoc failed ー lassoc failed fix("5") fix returned " + ( X , 4 ) " form returned " * ( + ( X , 4 ) , 5 ) " lassoc returned " * ( + ( X , 4 ) , 5 ) ” ・・・・演算式の変換結果 fix returned ” * ( + ( X , 4 ) , 5 ) " main failed ・・・ Ctr ト D を入力した expr .1Cn mary$ UNIX MAGAZINE 1991.9 た手続きの名前と引数からなります。また、手続きのネ ストレベル ( 引を使ったインデントで表現されます。 expr の実行時トレースをリスト 2 に示します。 expr が演算式“ ( x + 4 ) * 5 ”を prefix 表記“ * ( + ( x , 4 ) , 5 ) ” に変換している様子がお分かりになるでしよう。ここで はトレース値として一 1 を指定しているので、すべての 手続きの参照関係が表示されています。 リスト 2 は入力演算式が簡潔なわりにかなり長大な ものになっていますが、その理由は変数 X や数字 5 など の終端記号の判定ガ去がスマートでないためです ( もっ とうまい方法があるかもしれません ) 。 105

7. UNIX MAGAZINE 1991年9月号

UN Ⅸへの招待⑩ wtrnp には、どのユーザーがいつどこからログイン したかという記録がとられています。あるユーザーがロ グインすると、ます /etc/utmp にその記録がとられま す。そのユーサーがログアウトすると、 /etc/utmp に ある該当情報は /usr/adm/wtmp に移動されます。ち なみに、 who コマンドは /etc/utmp の内容を参照して 14 : 39 14 : 27 13 : 05 245 . 08 246.04 を使います。 できません。内容を見たい場合は、次のようなコマンド りませんから、 cat などのコマンドで内容を見ることは /usr/adm/wtmp は ASCII 形式のファイルではあ 、ユーサーのログイン状況を表示しています。 % who /usr/adm/wtmp reboot aya て 00t % last aya aya aya Ju1 COIlSOIe Jun console Jun tty01 tty01 console 21 : 00 2 00 : 12 2 00 : 12 Sat S at S at 1 Ju1 Ju1 Ju1 6 6 6 who の引数でこのファイル名を指定すると、 wtmp の先頭から情報が表示されます。一方、 last では wtmp の最後から、すなわち最新のログイン状況が表示され ます。 /usr/adm/wtmp を扱うコマンドには、このほ かにも /etc/ac(/usr/etc/ac) というコマンドがありま す。このコマンドは、ログイン状況を集計するコマンド というコマンドが記述されています。これは、カー /usr/etc/accton /usr/adm/acct ; echO 次の例は、ユーサーごとの合計です。 とのログイン時間の合計などを報告します。 で、たとえばューサ、一ごとのログイン時間の合計、日こ 154 に /usr/adm/saveacct というファイルにマージされて さて、 /usr/adm/acct の内容は、一定の時間ごと の引数カ甘旨定されていれはその限りではありません。 /usr/adm/acct にとられる」と説明したのですが、別 を指定することが多いので、「プロセスごとの記録は スごとの記録がとられます。引数には /usr/adm/acct いれば、 accton の引数で指定したファイルにフロセ ンドです。 UNIX の立ち上げ時にこれが実行されて ネルのもつアカウント機能をオンにするというコマ ac -P still logged in 14 : 30 ( 00 : 02 ) still logged in aya 0 . 96 tota1 poweroff 0 .00 次に、 /usr/adm/acct と saveacct を見てみましょ う。 acct は、ユーザーが実行したコマンドの記録をと るためのファイルです。記録係は、カーネルさんです。 1991 年 7 月号で説明しましたが、 /etc/rc には、 accounting' >/dev/console 2 > & 1 いきます。コマンドはどんどん実行されるので、 acct の 大きさがあっという間に大きくなってしまうからです。 そこで、ある時間を経過すると acct の内容か整理さオ L 、 統言 t がとられて saveacct に書き込まれるわけです。 wtmp と同様、これらのファイルの内容は ascii 形 式のファイルではないので、直接見ることはできませ ん。このため、 lastcomm というコマンドを使って 表示します。 lastcomm は、引数が指定されなければ /usr/adm/acct の内容を新しい情報順に表示します。 また、引数でコマンド名、ユーザー名、端木名などを指 UNIX MAGAZINE 1991.9

8. UNIX MAGAZINE 1991年9月号

LJN Ⅸ流プログラミング 11 たファイルポインタに対して getc を繰り返し呼び出し 外の文字からなる文字列を意味しています。つまり 2 つ 目の引数には、 = の直後から改行文字の直前までが代入 ます。 されます。 工ラーを判定する場所はもう 1 カ所あります。 2 つ目 さきほど、 fscanf の戻り値は変換できた引数の数だ の引数に代入された値が on か。仕かを検査する部分で と述べましたが、入力が終了した場合には EOF を返し す。 2 つ目の引数に代入された値がこれらの文字列でな ます。この値をループの終了条件として使うことも忘れ いのならは、エラーである旨を表示して次の行の処理に てはいけません。これで、行単位の処理ができるように 移らなければなりません。 なりました。次はエラーを検出するガ去です。 残りの部分は、さきほどのプログラムとよく似た手 工ラーの検出は、 fscanf が返す値にもとづいておこ 順になります。最初にオフションの設定か書かれたファ こでは 2 つの引数を指定していますから、 ないます。 イルをオープンするための処理、それぞれの文字に対応 2 以外の値 ( つまり 0 や 1 。 EOF は特別 ) が返された ら入力行にエラーがあると判定するのです。その場合、 するオプションを設定したり解除したりする処理、オー プンしたファイルをクローズする処理、それぞれのオフ その行のなかでまだ fscanf か第売み込んでいない入力が ションの値を出力する処理などをおこないます。最終的 あるはすですから、それを読み飛はさなけれはなりませ ん。それには、改行文字か EOF がくるまで指定され には、次のようになります。 #include く stdio . h> ・ 1 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 #define MAXLEN 256 0 0 0 int i nt int *fp; buf [MAXLEN] ; *ptr ; ch ; retval , tmpval ; line = 0 ; FILE Char Char char int int if ( (ptr = getenv("HOME") ) = = NULL) { fprintf (stderr , "Can ' t get HOME environment variable\n" ) ; exit(l); strcpy(buf , ptr) ; strcat(buf, "/ . test_file") ; if ((fp = fopen(buf, "r")) = NULL) { fprintf(stderr, "Can't open file %s\n" , buf); exit(l); / * main 100P * / fscanf(fp, "set %c while ( (retval 取十十・ if (retval ! = 2 ) { &ch, buf)) ! = EOF) { 140 UNIX MAGAZINE 1991.9

9. UNIX MAGAZINE 1991年9月号

ユーサーへの道 5 表 2 マシンタイプ ースーバー 表 3 CPU のタイプ sun3 sun3x sun4 sun4c Sun3 / 50 , 60 , 75 , 140 , 150 , 160 , 180 , 260 , 280 Sun3 / 80 , 460 , 470 , 480 Sun4 / 110 , 260 , 280 SPARCsystem 330 , 370 , 390 , 470 , 480 , 490 SPARCstation1,1 十 ,2,SLC IPC イギュレーション・ファイルです。 のテープルのサイズを決めるためのものです。 大ューサー数を表すものではありません。カーネル内部 この数は、かならすしもそのマシンにログインできる最 カーネルがサポートするユーサーの最大数を指定します。 ・ maxusers motd) で表示されます。 ここで指定する名前はログイン時のメッセージ (/etc/ という名前がついていますが、これは変更が可能です。 ュレーション・ファイル GENERIC では、℃ ENERIC" システム名 ( カーネル名 ) を指定します。このコンフィギ ・ ident になっています。 、、 SUN4C ー 60 〃となります。ほかのマシンは表 3 のよう CPU のタイプを指定します。 SPARCstation の場合は ・ cpu っています。 はヾ sun4c 〃となります。ほかのマシンは表 2 のようにな マシンのタイプを指定します。 SPARCstation の場合 ・ machine リをみていきましよう。 1 行で 1 つのエントリとなっています。それぞれのエント コンフィギュレーション・ファイルの中身は、基本的に ・ config ョンを表 4 ( 46 ページ ) に記しておきます。 プションにはたくさんの種類があります。おもなオプシ カーネルのオプション機能を指定します。カーネルのオ ・ options UNIX MAGAZINE 1991.9 config vmunix swap generic は、 ファイル名は vmunix としておきます。 GENERIC で スワップのファイルシステムを指定します。カーネルの カーネルファイルの名前、ルート・ファイルシステム、 SUN3X-80 SUN3X-470 SUN3-50 SUN3-60 SUN3 」 10 SUN3 ー 160 SUN3-260 SUN4-60 SUN4 ー 110 SUN4-160 SUN4-330 Sun3/80 Sun3 / 460 , 470 , 480 Sun3/50 Sun3/60 Sun3 / 110 Sun3 / 2601280 Sun3 / 75 , 140 , 150 , 160 , 180 Sun4 / 260 , 280 Sun4 / 110 , 150 SPARCstation1,1 十 ,2,SLC IPC SPARCsystem330 , 370 , 39014701480 , 490 となっていますが、次のように明示することもできます。 config vmunix root on sdOa swap on sdOb さらに、ファイルシステムの指定を root on sd だけ にすると自動的にルート・ファイルシステムが sdOa 、ス ワップが sdOb となります。 また、システムがクラッシュしたときのダンプを書き出 すファイルシステムも dump on sdlb のように指 定することができます。 ・ pseude—device 仮想デバイス名を指定します。これら仮想デバイスもた くさんあります。おもなものを表 5 ( 46 ページ ) に記して おきます。 ・ controller システムノヾス、ディスク・コントローラ、テープ・コン トローラ、 SCSI ホストアダブタなどを指定します。 ・ disk (SCSI) ディスクドライプを指定します。 ・ tape ( SCSI ) テーブドライプを指定します。 ・ device そのほかのデバイスを指定します。 ・ device—driver SPARCstation では、組み込むデバイスのデバイスド ライバを指定します。 カーネルの調整 ルを書き換えてみましよう。 いてはすでに説明しました。そこで、今度は実際にカーネ カーネルのリコンフィギュレーションが必要な場合につ 45

10. UNIX MAGAZINE 1991年9月号

emacs 入門 ,/ へ、/ N 書きに関係する変数や関数を中心に紹介しました。次回は、 今回の続きということで、ディレクトリに関するお話をす れると、ユーザーの不快指数も上がりますから、プログラ ミングや文書の作成にも悪影響を及ほ、します。 次回の予告 M-x pwd 今回は files. el ファイルから読み取ったファイルの読み コマンド ・今回出てきたコマンドの一覧 ることにしましよう。 ( あらい・みちこ ASTEC) recover—file auto—save—mode M-x toggle¯read—only revert—buffer info M-x undo (C-- 、 C-x u) save—some—buffers (C-X M-x kill—some—buffers M-x cd M-X UNIX MAGAZINE 1991.9 save-abbrevs require-final-newline buffer-read-only trim—verslons—withotlt—asking kept—new—verslons kept-old-versions verslon—control make-backup-file auto-save—visited-file-name delete- auto-save- files auto—save—interval auto-save-default p 変数 set-buffer-modified-p buffer-modified-p isp 関数 s) ファイルをリカバーする オートセープ・モードの切替え バッフアの変更状態を設定する関数 バッフアが変更されたかどうかを返す関数 複数のバッフアを確認しながら削除 複数のファイルを確認しながらセープ デフォルトディレクトリの変史 デフォルトディレクトリの表示 1 つ前の変史をもとに戻す ⅲ fo システムの起動 これまでのバッフアの変更を無効にし、もとのファイルから読み込む ヾッフアの変更可能 / 変更禁止状態の切替え オートセープ先のファイル名の選択 オートセープ・ファイルを残すかどうかの指定 オートセープの間隔の指定 オートセープ機能の有効 / 無効の切替え 文書ファイルの読み書きと同時にアプレピエーション定義ファイルを読 ファイルの最後にニューライン文字を追加するかどうかの指定 バッフアが変更できるかどうかの指定 削除する際にユーザーに確認を求めるかどうかの指定 シリアル番号つきのバックアップ・ファイルのうち、中間のファイルを ファイルを何個残しておくかの指定 シリアル番号つきのバックアップ・ファイルのうち、もっとも新しい イルを何個残しておくかの指定 シリアル番号つきのバックアップ・ファイルのうち、もっとも旧いファ バックアッフ・ファイルにシリアル番号をつけるかどうかの指定 バックアップ・ファイルを作るかどうかの指定 み書きするかどうかの指定 133