指定 - みる会図書館


検索対象: UNIX MAGAZINE 1994年8月号
96件見つかりました。

1. UNIX MAGAZINE 1994年8月号

パッフアの操作 「ファイルポインタの取得」の項で、高水準入出力では バッファリングがおこなわれると説明しました。その方 イ - 卩ヾッファリング ・プロック・ノヾッファリング 何もバッファリングしない 法には、 の大きさを示す値を指定します。型に指定できるのは、 ファリングの方法を設定する値を、大きさにはバッファ ッファリングに使う領域の先頭アドレスを、型にはバッ リングを指定するファイルポインタを、バッフアにはバ という形式で用います。ファイルポインタにはバッファ setvbuf ( ファイルポインタ , バッファ , 型 , 大きさ ) れは、 可能です。その場合は、 setvbuf 関数を利用します。 バッファリングの方法を、ユーサーカ甘旨定することも です。 まり改行文字を入力したとき ) に書込みをおこなうもの 端末などでは多く使用され、 1 行を書き込んだとき ( つ BUFSIZ の大きさが用いられます。行バッファリングは さは、デフォルトでは stdio. 五で定義されている定数 めて実際に書込みをおこなうものです。バッフアの大き 領域を用いて、その領域がいつばいになったときにはじ プロック・バッファリングは、ある一定の大きさの かならすファイルに対する書込みがおこなわれます。 れば、ファイルポインタに対して書き込んだ場合には、 の 3 種類があります。何もバッファリングしないのであ -IOFBF -IOLBF -IONBF バッファリングをおこなう 彳ァヾッファリングをおこなう バッファリングをしない という 3 つの値です。 バッファリングの方法は変更せすにバッフアを変更 したい場合には、 setbuffer 関数か利用できます。この 関数は、上の setvbuf 関数とはとんど同し動作をします が、バッファリングの型を指定する引数をとりません。 ただし、バッフアとして NULL を指定した場合には、 バッファリングのためのバッフアが存在しないことにな るので、バッファリングはおこなわれなくなります。 168 バッファリングの方法もバッフアの大きさも変えす 、バッフアを置く位置だけを変更するには、 setbuf 関数か利用できます。この関数は、バッフアの大きさを 指定する引数をとりません。代わりに、バッフアの大き さはつねに BUFSIZ と解釈されます。つまり、 setbuf(stream, buf) ; は、 setbuffer(stream, buf, BUFSIZ) ; と同しです。 setbuf 関数では、バッフアの大きさが固定 されていますが、 setbuffer と同様にバッフアに NULL を指定した場合には、バッファリングはおこなわれませ ん。 バッファリングに関するこれらの関数は、ファイルを オープンした直後に ( 読み書きをおこなう前に ) 指定し なければなりません。読み書きをおこなったあとに実行 すると、誤ったデータを読み込んだりファイルに正しく 書き出せない可能性があるので注意してください。 バッファリングを扱う関数であっても、どんなときに も実行できるものもあります。 setlinebuf 関数は、引 数にはファイルポインタのみを指定し、指定したファイ ルポインタのバッファリングを彳ァヾッファリングに変更 します。 完全なバッファリングに変更したい場合には、 fre- open 関数を用いて高水準入出力を再度初期化してくだ さい。バッファリングなしに変更したい場合には、 fre- 叩 en でふたたび初期化したあとで、あらためて setbuf 関数などで指定します。 以長ファイルなどの入出力をおこなうときに一般的 に用いる高水準入出力に関して解説しました。内容の多 くは、ごく基本的な事柄のためにこれまでとくに紹介し なかったり、すでに連載でとりあげたものです。それら も含めて高水準入出力をまとめて説明することで、入出 力の理解の助けになったのではないでしようか。 誌面も尽きてしまったので、前回約束していた低水準 入出力は次回にとりあげる予定です。 read や write の 基本的な部分は、 fread や fwrite と酷イ以しているので、 ぜひとも fread や fwrite 、さらには read や write のマ ニュアルを見てください。ひょっとすると、そちらのは うが分かりやすかったりして・・ UNIX MAGAZINE 1994.8 ( いまいすみ・たかし東京工業大学 )

2. UNIX MAGAZINE 1994年8月号

連載 /UNIX Communication Notes— のようにドメイン名を指定する。 —k ん・れ e な佖尾厖 c れ e AMD か下力するシステムのカーネル・アーキテクチャ かったときは、代わりに AMD 起重加の標準工ラー出 わらす、なんらかの理由で syslog のサーピスが使えな メッセージを出力する。 syslog を指定したにもかか れをファイル名とみなし、指定されたファイルにログ 用いられる。これ↓丿、タ ) 文字列カ甘旨定されたときは、そ 指定した場合は、 AMD の起重加学の標準ェラー出力が 構を利用してログを言求する。一方、 /dev/stderr と に syslog を指定すると、システムがもつ syslog の機 AMD に関するログの言当求ガ去を指定する。あ叩〃。れ ー 1 / 四一 0 0 れ のようにして、 arch の出力を使うほうがよい。 amd -k 'arch —k' ションを指定するときは、 略すると、 $ { ar 曲 } と同じ値が用いられる。このオプ ${karch} の値として参照できる。このオプションを省 値がセットされる。これは、マップファイルでの変数 を指定する。通常、 arch -k の実行によって得られる と指定して AMD を起動づ - る。 amd ー 1 syslog syslog を使ってログを言求するはうがよい。それには、 AMD の運用を考えると、ほかのデーモンと同しように 力が用いられる。 UNIX MAGAZINE 1994.8 る。たとえば、 起重加芋に、 AMD のプロセス ID を標準出力に出力す 述している場合は、このオプションを指定したはうがよい。 マウントマップ内でホスト名を使用してセレクタなどを記 ノート 2 せ結果が使われる。 DNS を利用している場合は、かならす DNS への問合 gethostbyname() で問い合わせた結果かオ褓内される。 調べ、正規の名前を使う。 $ { rh 。 st } の値にはつねに AMD て利用されるホスト名を gethostbyname() で amd -p > /etc/amd ・ pid としておけは、あとでプロセスにシグナルを送るときに 利用できる。これを、 # ki11 —SIGHUP 'cat /etc/amd. pid のように使えば、 ps コマンドでプロセステープルを検 索し、 AMD のプロセス ID を捜す手間が省ける。 このオプションを指定すると、現在マウントされている ファイルシステムに対して AMD がマウントしたよう に処理する。 lnheritance Filesystem を使用する場合 に指定することがある。 —t 介 - meot 屁田 / :s - 7 ℃ ra れ sm RPC がタイムアウトしたと判定するまでの時間と、リ クエストの再送間隔を指定する。マウントマップ内での マウント・オプション timeo と retrans の値として 使われる。これらの値は、通常の NFS におけるマウン ト・オプションと同じ要領で設定すれはよい。 バージョン情報を出力する。使用中の AMD のバージ ョン、サポートしているアーキテクチャ、 OS の確認 に役立つ。出力されるバージョン情報には AMD をコ ンパイルしたユーサー名も含まれているので、たとえば AMD がコアダンプしたとき、コンパイルした人に問い 合わせるというようなことにも利用できる。 ー ) 佖乞 t - 7 〃 eo 社 t マウントされている各ポリュームにはタイマーが用意さ れており、最後のアクセスから一定時間 ()c オプショ ンて指定したイ間か経過するとアンマウントの対象とな る。このオプションでは、判定してから実際にアンマウ ントするまでの時間を指定する。デフォルト値は、 120 秒 ( 2 分 ) である。 —x opts ログ出力のオプションを指定する ( 叩なは出力するロ グの不鶤頁 ) 。オプションには表 1 に示したものがあり、 これらをカンマで区切って指定する。デフォルトは、 —x a11 ,nomap,nostats になっている。オプションのう頁に n 。を付けると、そ のオプションに対応する情報は出力されない。たとえ ば、 45

3. UNIX MAGAZINE 1994年8月号

という形式で使用し、指定した文字を入力バッフアの先 頭に戻す機能があります。つまり、 ungetc を実行した あとで、 こまでに紹介した入出力のはかにも、あるメモリ領 域の内容をそのままファイルに書き出したりファイルか ら読み込むなどの、より直接的な操作をおこなう関数が あります。 fwrite 関数は、 fwrite( 配列のアドレス , 要素の大きさ , 要素の数 , ファイルポインタ ) という形式で使われ、ポインタの指す先に格納された、 指定された大きさのデータを要素の数だけファイルポイ ンタに書き込みます。たとえは、 struct data { int int } buf [nitem] ; というデータ構造を宣言しているときに fvrite(buf, sizeof (struct data) , nitem, stream) という形式で用いると、 stream カ甘旨しているファイル に配列本の内容か書き込まれます。 この関数を用いて文字列を出力したい場合、 s を文字 列を指すポインタとすると、 fwrite(), sizeof (char) , strlen(s) + 1, stream) と実行することができます。要素の大きさには、 1 文 字の大きさを指定します。要素の数に文字列の長さに 1 を加えた値を指定しているのは、文字列の終りを示す記 号、、 \ 0 " も書き出すためです。 getc ( ファイルポインタ ) を実行すると、 ungetc で指定した文字を読み込むこと になります。しかし、この関数では、正しく戻せるのは 1 文字しか保証されていません。複数の文字を ungetc したときの動作は、決まっていないのです。実際の処 理はあとからおこなうが、次に読み込む文字をちょっ と知りたいという場合には、 getc で読み込んでおいて ungetc で戻すなどという使い方ができるでしよう。 ファイルの直接的な操作 C ount ; value ・ UNIX MAGAZINE 1994.8 LJN Ⅸ流プログラミング 46 要素の数に 1 を指定し、配列のアドレスの代わりに データかオ褓内されているアドレスを指定すれば、配列で ないデータを書き込むこともできます。 fwrite で書き込んだデータを読み出すには、 fread 関 数を用いるのが便利です。 fread は、 fread( ポインタ , 要素の大きさ , 要素の数 , ファイルポインタ ) という形式で用います。このとき、指定されたファイ ルポインタから、指定された大きさの要素を指定個数だ け読み込んで、それをポインタか指す領域に書き込みま す。もし読込みの際にエラーが発生したり、指定された 数の要素を読み込む前に EOF を読み込んでしまった場 合には、その時点で読込みを中止して読み込んだ要素の 数を返します。たとえば、さきほどの fwrite の例で書 き込んだファイルを読み込むには、 fread(buf, sizeof(struct data) , nitem, stream) と実行します。 fwrite と fread は対で使います。とくに、データが文 字でない場合には、ほかの文字例 ) を扱う入出力関数 では処理できないので注意してください。ちなみに、書 き込まれるデータが文字でないということは、作成され るファイルに文字以外のデータが含まれるので、 more コマンドなどでは見ることができません。 ファイルに対して直接的な動作をするものに、読み書 きするファイルの位置を変更する fseek 関数も挙げら れます。この関数を実行すると、ファイルの任意の位置 から読み書きがおこなえるようになります。たとえは、 ファイルの先頭から 1 , 000 バイト目に必要なデータが f s eek ( ファイルポインタ , オフセット , 位置指定 ) fseek は、 を取り出すことができます。 むだに 999 バイトを読み飛ばさなくても、必要なデータ c = getc(stream) ; fseek(stream, 999L , 0 ) ; 入っている場合には、次のように実行すると、 方に向かって離れていることを示し、正の数を入れれば を指定します。ここに負の数を入れれば、ファイルの前 セットには、次の位置指定からどの程度離れているのか には操作したいファイルを示すものを指定します。オフ という形式で使用します。このとき、ファイルポインタ 165

4. UNIX MAGAZINE 1994年8月号

ファイルの後方に向かって離れていることを示します。 位置指定には、 0 ( 先頭から ) 、 1 ( 現在の位置から ) 、 2 ( ファイルの終端から ) を指定します。 つまり ( オフセットに L が付いているのは、 long 型 の値であることを示すためです ) 、 fseek(stream, OL, 1 ) は、現在の位置から 0 離れた場所を指定しているので、 何も変わらず、 を用いることもできます。この関数は、 ちなみに、ファイルの麪頁に戻るには、 rewind 関数 はファイルの終端を示すことになります。 fseek(stream, OL, 2 ) はファイルの先頭を、 fseek(stream, OL, 0 ) f seek ( ファイルポインタ , OL , というかたちで使用します。これは、 rewind ( ファイルポインタ ) 0 ) とした場合と同じ効果カ碍られます。 込み ) 位置を記慮しておくのか碍策でしよう。このため 使ってそこまで移動するのであれば、現在の読込み ( 書 かで必要なデータをみつけたときに、あとで fseek を 込む前にはふつうは分からないものです。ファイルのな fseek のオフセットとして使う値は、ファイルを読み ftell ( ファイルポインタ ) には ftell 関数が使えます。 ftell は、 はパイプラインに対しても同様です。このような場合に イルではないので、以前の入力を参照できません。これ きないのです。端末から入力されたものは実際にはファ 頭まで戻れると便利なのですが、これがかならすしもで れている場合に、以前の入力を見るために fseek で先 はありません。たとえば、標準入力か端末に割り当てら しかし、 fseek はどんなときにも使えるというわけで の位置まで移動できます。 セットに指定して、位置指定を 0 にすると、いつでもそ の現在の位置を返します。この値を fseek 関数のオフ という形式で使用し、ファイルポインタの指すファイル 166 は、 fseek 関数は一 1 を返します。 ファイルポインタの取得 「オープンとクローズ」の項で、高水準入出力を使うた めにファイルポインタを得るには、 f 。 pe Ⅱ関数を使うと 説明しましたが、これ以外にもファイルポインタを得る 方法か提供されています。 1 つは、 freopen 関数です。この関数は、 freopen()€ス名 , 型 , ファイルポインタ ) という形式で使います。パス名と型には、 fopen 関数と 同じものを指定します。この関数を用いると、パス名で 指定されたファイルを型が示す形式でオープンし、指定 したファイルポインタがそのファイルを示すようになり ます。つまり、 freopen を使って stdin 、 stdout 、 stderr などをほかのファイルにリダイレクトできます 4 。 fre 叩 en 関数を実行した場合、引数として指定したフ ァイルポインタをクローズしてから新しいファイルのオ ープンを試みます。したがって、 freopen に失敗した場 合には、古いファイルと新しいファイルのどちらもオー プンされていない状態になり、引数に指定したファイル ポインタは使えなくなります。 もう 1 つは、前回もちょっと触れましたが、 fdopen 関数です。この関数を使うと、低水準入出力用のファイ ルを示す値であるファイル・ディスクリプタを、高水 準入出力用のファイルポインタに変換することができま す。 fdopen 関数は、 fdopen( ファイル・ディスクリプタ , 型 ) という形式で使用します。型の部分には、 fopen 関数で 指定する型と同様なものを指定します ( もちろん、この ときにはファイル・ディスクリプタがその型と同じ扱い をできるものでなければなりません ) 。この関数により 返される値はファイルポインタで、これを指定すること により、高水準入出力の関数が使えるようになります。 ファイルポインタを得るための関数ではありません が、 fileno についても説明しておきましよう。この関 数はちょうど fdopen と逆の処理をおこないます。つま り、ファイルポインタからファイル・ディスクリプタを 得るためのマクロです。高水準入出力を使って処理して 4 前回、ファイルに対するリダイレクト欟冓の説明ではこの関数は使い ませんでした。もちろん、この関数を用いて実現することも可能です が、 dup システムコールについて理解してもらうためにあえて使用し ませんでした。 UNIX MAGAZINE 1994.8

5. UNIX MAGAZINE 1994年8月号

ワークステーションのおと一・ 図 3 boot コマンドの実行 ok boot ( 画面が消え、次のメッセージが表示されます ) SPARCstation 2 , Type 4 Keyboard ROM Rev. 2 . 2 , 32 MB memory installed, Seria1 #xxxx. Ethernet address 8 : 0 : 20 : xx : xx : xx , Host ID : xxxxxxxx. Rebooting with command : Boot device : /sbus/esp@O , 800000/sd@3 , 0 Fi1e and args : て 00t 0 Ⅱ /sbus/esp@O , 800000/sd@3 , 0 fstype 4.2 BOOt : 図 4 boot の help ok help boot Category : Fi1e download and b00t b00t vmunix ( default ) or other file b00t く specifier> ( ー Examp1es : vmunix from default device ( sd ) boot boot boot net boot vmunix from network vmunix froomm (MUNIX) from CD—ROM boot boot cdrom default file from tape bOOt tape boot myunix from disk with flags "¯as boot b00t disk myunix —as bOOt /sbus/esp/st@4 , 0 oldunix boot oldunix from scsi device ' st' target 4 unit 0 ok も使えるようです。そこで、 boot cdrom として CD- などと指定するようです ( 誌面の都合上、で行を折り返 ROM からプートする様子を見てみます ( 図 5 ) 。 しています ) 。マニュアルで使い方を憶えるだけではつま らないので、私の得意とする泥に利用法習彳断を使って 今度は、プートデバイスが /sbus/esp@O , 800000 / sd@6.O:c となっています。末尾に : c という指定があり みます。 ます。 c というくらいですから、こオ功ゞ c パーティション まず、屯に boot コマンドを実行します ( 図 3 ) 。 を指しているのかもしれません。どのようにすれは寉かめ SCSI ID が 3 のハードディスクの a パーティション られるでしようか。とりあえす、 から OS か起動しました。プート時のメッセージに、 boot /sbus/esp@0 , 800000/sd@3 , 0 : a Boot device: /sbus/esp@0 , 800000/sd@3 , 0 としてみると、問題なく OS か起動されます ()S は通常、 という行があります。どうやら、こオ功ワ。ートデバイスの a パーティションに入っています ) 。 指定のようです。ここで、 本当は、空いているパーティションに OS を入れて起 boot /sbus/esp@O , 800000/sd@3 , 0 動するかどうか確かめればよいのですが、ちょっと面倒で というふうに、 boot コマンドの引数にこのプートデバイ す。そこで、 OS を CD-ROM からプートしてミニルー スを指定すると、同しように OS カ起動します。 トをスワッフ。領域に作り、その状態でいったん止めて、 では、このプートテパイスの指定はどのような形式にな boot /sbus/esp@O , 800000/sd@3 , 0 :b っているのでしようか ? どうも、最後の、 sd@3 , 0 の 3 とします。つまり、 b パーティション ( スワッフ領域 ) を が SCSI ID のようです。 ROM モニターの help コマン ニルートか起動されるかどうか調べる 明示的に指定し、 ドで分かるかもしれません ( 図 4 ) 。 のです ( 図 6 ) 。たしかに、 b パーティションから起動し 最後の例から、 sd@3 , 0 の 3 が SCSI ID 、 0 がユニット ます。 番号であることが分かります。この help によると、プー こうすれば任意のパーティションから OS を起動 - す - るこ トデバイスの指定には、 /sbus/esp/st@4 , 0 のような形 とができそうですが、/sbus/esp@O.800000/sd@3, 0 :b 式だけでなく、もうすこし分かりやすい disk や cdrom 103 UNIX MAGAZINE 1994.8

6. UNIX MAGAZINE 1994年8月号

図 30 拡好との文茆 拡張子 ) : 堯ラされるアアリクうョ ) アロのラム ( △ ) : 縦組み L 訂 eX ペインラシ Pb「し由 . exe メモ帳 (notepad. exe) ライト (write. exe) レコーダー (recorder. exe) WinDVI にかける (b) 拡張子が DVI のファイルをダブルクリックすると Wpv1VfX にかける (a) 拡張子がのファイルをダブルクリックすると こではファイル・マネージャーから、 かて、きる。 ファイルのインデックス ( 0 から始まる ) である。たとえ ファイルの [TeXMode] セクションでのフォーマット・ では 1 ) は、 Windows ディレクトリにある wintex. ini ジ ] に指定するメッセージで、 virtex の 2 番目の引数 ( 例 は図 29 のように設定する。 (b) の場合に [DDE メッセー 追加 ] お尺し、 ( a ) のときは図 28 のように、 ( b ) のとき リから起重丿ける。 [ 編集 ] メニューから [ ファイルタイフ。の ファイル・マネージャーを使って Windows ディレクト 常はプログラム・マネージャーに登録されていないので、 REGEDIT は Windows の標準ユーティリテイだが、通 ます、登録工デイタ REGEDIT を起動する。なお、 という重川乍をするように設定するガ去を解説する。 びーし一のおと ごめんなさい 坂下秀 先月号で、次のようなことを書きました。 1. PC 用として市販されている CD-ROM ドライプは、 とくに設定を変更しなくても SunOS や SoIaris のイ 40 ば、私の工竟の wintex. ini ファイルは、 CTe XMode ] 縦組み LaTeX (Big)=BPLPLAIN 縦組み LaTeX=PLPLAIN となっているので、 1 で、縦組み LaTeX " を指定してい ることになる。、、糸はみ LaTeX (Big)" を設定する場合 は 0 を指定すればよいが、このときは起動するコマンドと して BwpvTbX (Big PLaTeX) を指定する必要がある。 なお、新しくフォーマット・ファイルを当すると、 のセクションに登録される順番が入れ替わることがあるの で注意が必要である。 最後に、ファイル・マネージャーの [ ファイル ] メニュー から [ アプリケーションとの関連付け ] を尺し、拡張子 を入力してから対応する「実行されるアプリケーション・ プログラム」をメニューから j 尺する ( 図 30 ) 。「統合環 境」に色反応か起こる向きはお試しあル ◆ 次号ではさらに進んだアプリケーション、 ・フリーな WinSock 竟の構築 ・ Windows 上の X サーノヾー ・ WinMosaic の設疋と日本群ヒ / 国際化の馳伏 などをとりあげる予定である。 ( ひがしだ・まなぶ大阪大学 ) ンストールに使える。 2. マウントしたいときは、ディップスイッチでプロック 長を 512 バイトに設疋するか、ソフトウェアで切り替 うに訂正します。 2 はいいのですが、 1 はちょっと不正確でした。次のよ える。 UNIX MAGAZINE 1994.8 る必要がある。 ディップスイッチでプロック長を 512 バイトに設定す に使える。 SunOS のインストールに利用するときは、 とくに設定を変更しなくても SoIaris のインストール ・ PC 用として市販されている CD-ROM ドライプは、

7. UNIX MAGAZINE 1994年8月号

には表示されないので、 fflush を実行して書き込んだ文 字列が画面に出力されるようにしています。 パイプラインに対する書込みなどでは、実際に書き込 まれるタイミングが問題になることもあります。このよ うな場合にも fflush 関数か利用できます。 入力と出力 前項のプログラム例では、プロンプトを出力するのに ゆ r ⅲ tf 関数を使っています。この関数は、ファイルポ インタを引数に指定できる printf 関数だと思ってくだ さい。引数は、先頭にファイルポインタを指定します。 残りの部分は、 printf 関数の引数と同しです。プログラ ムのなかでは、何か工ラーがあったときなどューザーに fprintf (stderr , 対してメッセージを出力するために 3 一部の OS では、 putc をマクロと関数の両方で定義しているものも 関数か準備されています。 ません。そういう用途には、まったく同じ仕様の fputc されています 3 。そのため、アドレスをとることはでき なみに、多くのシステムでは putc はマクロとして定義 は putc の標準出力に対するバージョンといえます。ち printf と fprintf の関係と同様です。つまり、 putchar ンタを引数に指定します。 putchar と putc の関係は、 力するもので、出力したい文字と出力先のファイルポイ ります。これはファイルポインタに対して 1 文字を出 出力としてもう 1 つよく使われるものに putc があ 意してください。 し関数が多いのですが、この場合は仕様が異なるので注 ファイルポインタを使うものと使わないもので仕様が同 けられますが、 fputs では改行文字は付けられません。 puts を用いると文字列の後ろにかならず改行文字が付 る puts とも考えられますが、若干動作が異なります。 字列を出力します。 fputs はファイルポインタを指定す という形式で使い、指定されたファイルポインタに文 fputs( 文字列 , ファイルポインタ ) 込みたけれは、 fputs 関数カリ用できます。これは、 フォーマットを指定する必喫がなく文字列だけを書き 式でファイルに出力したいときなどにも便利です。 という形式でよく用いられます。また、ある決まった形 164 あるようです。 次に、入力について説明します。ますはフォーマット つきの入力です。これには fscanf を用います。 fscanf は scanf のファイルポインタを指定できるバージョン です。この関数は、 fprintf などでフォーマットを指定 して出力したファイルを読み込むのに便利です。 フォーマットは必要なく、ただたんに 1 行だけ読み 込みたいときには fgets 関数が便利です。これは、 fgets()< ッファ , 最大文字数 , ファイルポインタ ) という形式で使用し、バッフアには文字配列のアドレス を指定します。最大文字数には、文字酉改」の大きさを指 定しますが、実際に読み込まれるのは最大で、 最大文字数ー 1 " までです ( これは、最後に文字列の終りを示す、 \ 0 " が 加えられるためです ) 。 fgets は、 最大文字数を読み込んだとき 改行文字を読み込んだとき ・ EOF ( ファイルの終り ) に出合ったとき にそこまでをバッフアにオ内して戻ります。 fgets と同じ働きをするファイルポインタを指定しな い関数が、 gets です。これも、 fputs と puts の関係と 同様にはんのすこしだけ仕様が異なります。 fgets では、 読み込んだ文字をすべてバッフアに格納しますが、 gets では改行文字はバッフアに格納しません。また、 gets で は最大文字数を指定しないので、確保している領域を超 えて読み込んでしまう可能性があります。この点が大き な問題になることもあるので、 gets ではなく fgets を 使ったはうがよいでしよう。 1 文字ごとの言もムみには、 getc 関数を使います。 getc には、引数に読み込むファイルポインタを指定します。 getchar という標準入力からしか読込みをしない関数 もあります。 getc は putc と同様にマクロとして定義さ れているので、アドレスをとることはできません。注意 してください。そういう場合には、 fgetc を用います。 これで入力に関しても、フォーマットっき、行単位、 文字単位の 3 つを紹介しました。文字単位の入力を補助 するのに ungetc という関数もあります。これは、 ungetc( 文字 , ファイルポインタ ) UNIX MAGAZINE 1994.8

8. UNIX MAGAZINE 1994年8月号

連載 / / Li Language¯O 追加しながらいままでってきました。今回は、このファ イルを整理して、ひととおりの機能をサポートするように します。 html. pl リスト 1 に瓧 ml. pl の内容を示します。このリストを 見ていただけば分かるように、 1 っ 1 つはとても簡単なサ プルーチンの集合です。 それぞれの関数はすべて文字列を返します。したがっ て、プログラム側で print 文などを使って明示的に出力 する必要があります。また、原則として最後に改行文字を 加えることもないので、必要であれ ( 月示的に改行文字を 出力します。 html. pl で定義されている関数を説明しましよう。 &H(LEVEL, TITLE) &HI( TITLE) , &H2( TITLE) , &H6 ( TITLE) &H はレベルとタイトルの文字列を指定します。 1 ~ 6 までのレベルに対応して、 & HI 、 プルーチンも用意されています。 &NAME (NAME, TEXT) &HREF (REFERENCE, TEXT) &H6 というサ ラベルを付けるための NAME と、ハイバーテキスト のリファレンスを定義するための HREF です。どちらも 最初にリンクの名前を指定して、次にその属性を与える文 字列を指定します。内部では次の & A を使用します。 &A(ATTR, VALUE, [ATTR, VALUE] TEXT) アンカーを定義するための汎用関数です。アンカーに は複数の属性を指定できます。その属性ØTTR) と値 ①員カ (E) を 2 っすっ組にして指定します。燧麦に余った 引数がそのアンカーを付けるテキストになります。 たとえは、 NAME と HREF の両方を定義するには、 &A( 'NAME' , 'srekcah' , 'HREF' , 'srekcah. html' UNIX MAGAZINE 1994.8 というようにします。 'srekcah') ; &HR , &BR , &P 叫屯に < HR > 、 <BR> 、 < P > になります。引数はと りません。 注 : く P > は END TAG をとらない Empty Element では ありませんが、通常 < BR > などと同様に扱われることが多い ので、 Empty EIement として扱いました。 &DL は <DL> 、 &-DL は < / DL > で、ほかも犲兼で す。 &LI ( TEXT) , &DT( TEXT) , &DD ( TEXT) &DTD ( TEXT, TEXT) リストの要素を出力する < LI > 、 <DT> 、 <DD> TAG のための関数です。 &DTD は、 DL リストのタイ トルとテキストの 2 つの引数をとり、 <DT> と <DD> の両方を返します。 注 : 本来は < LI > なども END TAG すなわちく / LI > で終 るのですが、それは省略できます。可読生のため html. pl で も END TAG は出力しないことにしました。 &TITLE( TEXT) , &HEAD (HEXT) , &ADDRESS ( TEXT) , &PRE ( TEXT) , &BLOCKQUOTE, &B ( TEXT) , &U( TEXT) <TITLE> TEXT</TITLE> のように、始まりと終 りの TAG を含む関数です。 &IMG(FILENAME, [ALIGN, [ A ん幻 ] ) イメージのためのサプルーチンです。最初の引数にファ イル名を指定します。 位置を指定する場合には 2 番目の引数を指定します。位 置を省略すると HTML でも省略さ Bottom を指定し たのと同し未になります。 イメージを表示しない場合の代わりのテキストいカの は、 3 番目の引数て指定します。 &CLEAN( TEXT) テキストのなかの特殊文字を HTML で解釈されな いように置換する関数です。、、 & " は、、 &amp;" に、 115

9. UNIX MAGAZINE 1994年8月号

連載 UNIX Communication Notes 山口英 AMD 再説 (2) 前回は、 AMD の概要、扱えるファイルシステムの種 類などについて説明した。今月も、 AMD について解説 コマンド行オプション する。 44 のがある。 ションを指定する。使用できるオプションには、下記のも 使われるいくつかの変数の値や、その重川乍を規定するオフ コマンド行の最初の叩 t れには、 AMD の稼動中に される。 それぞれのマップに言されたマウントガ去に従って管理 と扣疋する。こうすれは、 2 つの automount point は、 amd /home amd-map. home /pub amd¯map ・ pub 用意するときは、 れにマウントマッフ amd—map. home 、 amd-map. pub を と /pub の 2 つの automount point を設疋し、それぞ 上に 1 つのデーモンしか不力させない。たとえは、 /home は 1 つの AMD でおこなう。 AMD では、 1 つのホスト 複数の automount point を設定する場合も、その管理 定する。 マウントマップ (mount-map) を map-name として指 市 7 、には automount point を指定し、それに対応する amd 0 0 れ市 ma 〃ーれ佖 me [ ー ma 〃 -0 0 司 ン類を指定する。 AMD を起動するときは、以下のような書式でオプショ されている。 こでは、各オフションについて説明する。 AMD では、かなりの数のコマンド行オプションが用意 —a 市 ct0 型 デフォルトのマウント・ディレクトリを指定する。 こで指定される値は、マップファイル内の変数 ${autodir} の値として参照できる。たとえば、 AMD カイ吏うデフォルトのディレクトリを / とするには、 amd -a /am のように指定する。 —C C 佖 C ん e - をれ℃ al マウントされているポリュームが、ここて指定された時 間 ( 単位 : 秒 ) だけアクセスされないと、 AMD はその ファイルシステムをアンマウントの対象とする。この場 合、 AMD カ躾際にアンマウントを実行する。実行でき なかったときは、一で指定した値をタイマーにセット し、設定した時間か茴したのちに再度アンマウントを 実行する。 cache-interval のデフォルト値は、 300 秒 ( 5 分 ) である。 —d dom 硯れ ホストカ嘱すドメイン名を指定する。ここてオ日疋された 名前は、マップファイル内で変数 ${domain} の値とし て参照できる。このオプションを省略すると、以下の処 理がおこなわれる。 ・ホスト名にドメイン名カ唸まれている場合は、それを 採用する。 ・ホスト名にドメイン名が含まれていない場合は、ドメ イン名として u 。 . domain を使う。 たとえは、ホストがドメイン is ・ aist-nara ・ ac ・ jp に属しているときは、 amd —d is . aist—nara. ac ・ JP UNIX MAGAZINE 1994.8

10. UNIX MAGAZINE 1994年8月号

連載 /NET WORTH—O 表 2 ISO -8859 文字セット ISO 番号 ISO ー 8859 ー 1 ISO ー 8859 ー 2 ISO ー 8859 ー 3 ISO ー 8859 ー 4 ISO -8859 ー 5 ISO -8859-6 ISO -8859-7 ISO -8859-8 ISO -8859-9 内容 Latin Alphabet No. 5 ( 1990 ) Latin/Hebrew Alphabet ( 1988 ) Latin/Greek Alphabet ( 1988 ) Latin/Arabic Alphabet ( 1988 ) Latin/Cyrillic Alphabet ( 1988 ) Latin Alphabet No. 4 ( 1988 ) Latin Alphabet No. 3 ( 1988 ) Latin Alphabet No. 2 ( 1987 ) Latin Alphabet No. 1 ( 1987 ) ISO -8859- X 文字セットはすべて 8 ピット、 1 バイト、グラフィッ ク文字セットである。 リッチテキスト MIME では、次の 2 つのオ剽勺なテキスト・サプタイ プが定義されている。 Text/plain ・プレーンテキスト、構造をもたないテ キスト Text/richtext : 簡単に整形されたテキスト とくに指定しないかぎり、コンテントタイプは Text/ plain である。これ ( 冓造をもたないたんなるテキストで、 これまで 10 年以 - ヒにもわたってネットワーク・メールで 用いられてきたフォーマット (RFC821 と RFC822 で 定められている ) と同しである。 メール本文の表示に使われる文字セットは、どちらの サプタイフ。の場合もパラメータて指定する。 MIME では、 表 2 に示す文字セットがあらかしめ定義されている。必 要に応して、これ以外の文字セットを定義することもでき る。メールのヘッダで文字セットカ甘旨定されていなけれ は、 US-ASCII とみなす。 MIME メールのヘッダでは、 次のようにして文字セットを指定する。 Content—Type : text/plain; charset=US—ASCII RFC821 と RFC822 では、メールの本文には ASCII テキストを使うようにと書かれている。しかし、過去にい くつかのメールプログラムがこの、、 ASCII" という言葉を 勝手に解釈したため、さまざまなバリエーションカヾ取生し てしまった。 MIME は、 US-ASCII という文字セット を日用寉に定義している。 MIME の仕様では、 US-ASCII は ANSI X3.4 ー 1986 のことである。 MIME では、下記 158 の文字セットがあらかじめ定義されている。 ・ charset=US-ASCII ・ charset=ISO-8859-X ISO の文字セットでは、上の、、 X " を 1 ~ 9 のいすれか の数に置き換えた名前を使う俵 2 ) 。大文字と小文字の 区別はしない。新たな文字セットとその名前をる当求するこ とはできるが、すでに国ド票準になっているものか、 RFC に言されたものでなければならない。 比較的単純ではあるが、多様な表現ができる Text/ richtext サプタイプも定義されている。リッチテキスト (rich text) は、ポールド体 / イタリック体、固定蝠 / プロ ポーショナル・フォント、下線などを使ったテキストに 対応し、ページレイアウト機能も備えている ( 表 3 ) 。リッ チテキストの主目標は、各種のフォントを用いて整形した 電子メールを可能なかぎり簡潔なガ去でネットワークの世 界に提供することにあった。 MIME に対応したメールプ ログラムが多くなれば、送り手が亟頁かのフォントや下 線などを用いて書いたメッセージを単純なフォーマットの メールとして送り、これを受け取った側では送った側と同 じ形態で読めるようになる。 コンテントタイプで文字セットを指定しない場合、リッ チテキストは US-ASCII として扱われる。文字はすべて そのまま表示されるが、 く (ASCII コードの 60 ) だけ は特別な意味をもつ。これに続く文字列は、テキスト・フ ォーマットのコマンドとみなされる。表 3 からも分かるよ うに、すべてのコマンドは、、く > " (ASCII コードの 60 と 62 ) で囲まれる。各フォーマット・コマンドは 40 文 字を超えてはならす、 US-ASCII 文字セットに含まれる アルファベットと数字、 ( ハイフン ) からなる。 フォーマット・コマンドは、その指定を解除するコマン ドか現オ L るまて有効である。解除するコマンドは、フォー マット・コマンドの知寬こ / を付けた名前になる。これ らのコマンドは適切な組になっていれば、入れ子になって もかまわない。たとえは、ヘッダをセンタリングし、ポー ルド体て表小するためには次のように書く。 く center> く bold> A Whiter Shade of Pa1e く /bold> く /center> リッチテキスト・フォーマットには、ソフトとハードの 2 不頁の予 (line break) がある。いわゆる改行 (CR/LF) はソフト改行として扱われるが、これは SMTP での要求 UNIX MAGAZINE 1994.8