プログラミング演習I 2003年7月2日(第11回) 木村巌
今日やること ファイル入出力の勉強 ファイルへのopen, 読み書き、close 教科書12章
知識編:ファイル入出力の手順 ファイルをopenする(それに伴うストリームが割り当てられる) ファイル(に伴うストリーム)を読み書きする ファイル(に伴うストリーム)をcloseする 以下単に、「ファイルを読む」「ファイルに書き出す」などという
ファイル名 ファイルシステムの中で、特定のファイルを指定するには? プログラミング演習I第二回のスライド12枚目を参照
ファイルのオープン:fopen() FILE *fopen (char *filename, char *mode); filenameという文字列で指定されるファイルを、modeで指定されるモードで開く そのファイルをストリームに割り当てる そのストリームを表すFILE型のデータへのポインタを返す
ファイルを開くときのモード Mode 意味 r w a r+ w+ a+ 入力のため既存のファイルをオープン 出力のためファイルの新規作成、または既存ファイルの切りつめ a 出力のためファイルの新規作成、または既存ファイルへの追加 r+ 更新(読み書き両方)のための既存ファイルの先頭からのオープン w+ 更新のためのファイルの新規作成、または既存ファイルの切りつめ a+ 更新のためのファイルの新規作成、または既存ファイルへの追加
fopen()のモードの属性 属性 モード r w a r+ w+ a+ ○ × 指定ファイルが既存ファイルである 既存ファイルの内容の喪失 ストリームの読み取り許可 ストリームへの書き込み許可 ストリームの終わりでのみ書き込み許可
指定されたfileを表示する例 プログラム例「mycat.c」参照 教科書p.228、リスト12-1 なんでmycat? Unixには、ファイルを表示するcatというコマンドがある. Concatinateの略 それの自分で書いた機能限定版なのでmycat.
ファイルからデータを読みこむ例 プログラム例「mean.c」を参照 前回のレポート課題を、さらにファイルからデータを読み込めるように変更 読み込んだデータの平均を計算する
ファイルをコピーする例 プログラム例「mycp.c」参照 教科書p.230, リスト12-2参照 ファイル名をプログラムの引数として受け取るように変更した Unixの世界ではこちらが一般的 教科書p.234~、§12.5参照 Unixでは、cpというコマンドがファイルをコピーするもの
ファイルとの1文字入出力 int fgetc(FILE *), int getc(FILE *)で、ストリームからの1文字入力 最後まで読み込むとEOFを返す ファイルの文字数を数える例「mywc.c」参照 ファイルの大きさを知るには、system callのstat(2)を使う手もある.より詳細な情報も得られる
まとめ 主にファイルの入出力を学んだ ファイルのオープンfopen(), ファイルのクローズfclose() ファイルからの読み込み:fgets() ファイルへの書式付出力:fprintf()
補足 printf()はstdoutへ書き出す, scanf()はstdinから読み込む fprintf()は最初の引数で指定するストリームへ書き出す、fscanf()は最初の引数で指定するストリームから読み込む sprintf()は最初の引数で指定するcharの配列へ書き出す、sscanf()は最初の引数で指定するcharの配列から読み込む
教科書で残っている範囲 テキストの内容でまだやってないのは、 文字列に関する箇所 ポインタ 次回はこの2つの予定です
レポート課題 課題:mycat.cを改造して、各行に行番号を表示するようにせよ. いつもどおり木村までメールで送ること.締め切りは7/8(火)一杯.質問・感想なども、随時受け付けます. 添付ではなく、メール本文に書いてくれたほうが助かります.