Profile

ys2310

Author:ys2310
2008年春にNew York Cityにあるふる〜い大学を卒業。


Categories


new postings


new comments


new trackbacks


monthly archeive


FC2ブログ 転職
DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:C/C++ stdio.h
ファイルアクセス関数
fclose
ヘッダ #include "stdio.h"
形 式 int fclose(FILE *stream);
機 能 fclose関数は、streamが指すストリームをフラッシュし、そのストリームに結び付けられたファイルをクローズする。そのストリームに対してバッファリングされただけでまだ書き込まれていないデータは、ホスト環境に引き渡し、ホスト環境がそのデータをファイルに書き込む。バッファリングされただけでまだ読み取られていないデータは切り捨てる。そしてそのストリームをファイルから切り離す。そのストリームに結び付けられたバッファが自動的に割り付けられたものであれば、そのバッファを解放する。
返却値 fclose関数は、ストリームのクローズに成功したとき0を返し、何らかのエラーを検出したときEOFを返す。

[Quote]:http://www.bohyoh.com/CandCPP/C/Library/fclose.html

| BLOG TOP |
DATE: CATEGORY:C/C++ stdio.h
エラー処理関数
feof
ヘッダ #include "stdio.h"
形 式 int feof(FILE *stream);
機 能 streamが指すストリームに対応するファイル終了表示子を判定する。
返却値 streamに対応するファイル終了表示子がセットされている場合に限り、0以外の値を返す。

【使用例】

#include
#include

int main(int argc,char *argv[])
{
FILE *fp;
int c;

if((fp = fopen(argv[1], "r")) == NULL ) {
fprintf(stderr,"ファイルオープンエラー\n");
exit(EXIT_FAILURE);
}

/* ファイル終了まで読み込み 下記注意参照のこと */
while (feof(fp)==0) {
c = getc(fp);
putchar(c);
}

fclose(fp);

return 0;
}

【実行結果】

指定ファイルの内容を全て標準出力します。

(注意) この使用例は、あくまでもファイル終了までファイルを読み、ファイル終了の検知を行うことが目的です。この例のようにすると、ファイル終端に達しても getcでファイルを読み込もうとするので、読み込みに失敗し、cにはEOFが返ります。それを。putcharで表示するのはうまくありません。ですから、getcでファイル全体を読む場合には、次のようにしてください。

#include
#include

int main(int argc,char *argv[])
{
FILE *fp;
int c;

if((fp = fopen(argv[1], "r")) == NULL ) {
fprintf(stderr,"ファイルオープンエラー\n");
exit(EXIT_FAILURE);
}

/* ファイル終了まで読み込み */
while ((c = getc(fp)) != EOF) {
putchar(c);
}

fclose(fp);

return 0;
}

[Quote]:http://www.bohyoh.com/CandCPP/C/Library/feof.htmlhttp://www9.plala.or.jp/sgwr-t/lib/feof.html

| BLOG TOP |
DATE: CATEGORY:C/C++ stdio.h
エラー処理関数
ferror
ヘッダ #include "stdio.h"
形 式 int ferror(FILE *stream);
機 能 streamが指すストリームに対応するエラー表示子を判定する。
返却値 streamに対応するエラー表示子がセットされている場合に限り、0以外の値を返す。

【使用例】

/* 書き込みモードでオープンしたファイルを読み込む場合 */
#include
#include

int main(int argc,char *argv[])
{
FILE *fp;
int c;

if((fp = fopen(argv[1], "w")) == NULL ) {
fprintf(stderr,"ファイルオープンエラー\n");
exit(EXIT_FAILURE);
}

/* ファイル読み込み */
c = fgetc(fp);
putchar(c);

if(ferror(fp)!=0)
{
/* エラー発生 */
printf("ファイルエラーが発生しました\n");

/* エラー指示子をクリア */
clearerr(fp);
}

fclose(fp);
return 0;
}

【実行結果】

ファイルエラーが発生しました

[Quote]:http://www.bohyoh.com/CandCPP/C/Library/ferror.htmlhttp://www9.plala.or.jp/sgwr-t/lib/ferror.html

| BLOG TOP |
DATE: CATEGORY:C/C++ stdio.h
ファイルアクセス関数
fflush
ヘッダ #include "stdio.h"
形 式 int fflush(FILE *stream);
機 能 streamが出力ストリームまたは直前の操作が入力でない更新ストリームを指すとき、fflush関数はそのストリームでまだ書き込まれていないデータをホスト環境に引き渡し、ホスト環境がそのデータをファイルに書き込む。それ以外のときの動作は、未定義である。
 streamが空ポインタのとき、fflush関数は、フラッシュ動作が定義されるすべてのストリームに対してこの動作を行う。
返却値 fflush関数は、書込みエラーが発生すればEOFを返し、そうでなければ0を返す。

【使用例1】

/* 2度目以降の%c指定を正常に行う(使用できるかどうかは各自確認してください) */
#include

int main(void)
{
char a;

printf("文字の入力 ");
scanf("%c",&a);

/* fflushを省くと、2回目以降の文字入力が正常に行われません。*/
printf("文字の入力 ");
fflush(stdin);
scanf("%c",&a);

return 0;
}

【実行結果】

2度続けて文字入力ができる

【使用例2】

/* setbuf関数で出力バッファをユーザバッファに指定した例 (処理系依存)*/
#include

int main(void)
{
char buf[BUFSIZ];
long l;

/* 出力バッファをユーザバッファに指定 */
setbuf(stdout,buf);

/* 文字列をユーザバッファを使って出力 */
printf("ABCDEFGHIJKLMN");

/* 出力しない。そのことを確認するために時間稼ぎの空ループ */
for (l=0; l<1000000000; l++);

/* fflushで初めて出力 */
fflush(stdout);

return 0;
}

【実行結果】

ABCDEFGHIJKLMN ※しばらくたった後出力


(stdin、stdoutについて)
stdin は「標準入力ストリームポインタ」、stdoutは「標準出力ストリームポインタ」です。

「ストリーム」とは、Cプログラムとファイルを結ぶデータの流れです。ファイルがオープンされると、Cプログラムとファイルとの間にストリームが確立されます。このストリーム上に入力バッファと出力バッファという、緩衝記憶が置かれるのです。つまり、入出力を行うにはファイルオープンによって、このストリームを確立しなければなりません。

Cでは入出力デバイスもファイルとして扱います。しかし、キーボードやスクリーンを、入出力の動作をするためにオープンするのは面倒です。そのため、Cプログラムは実行されると、自動的にオープンする特別なファイルを用意しています。これが、標準ストリームで、オープン時に取得したFILEポインタを下記の「stdin〜stdprn」に格納します。

ストリームポインタ 機能 デバイス
stdin 標準入力 通常はキーボード
stdout 標準出力 通常はスクリーン
stderr 標準エラー出力 通常はスクリーン
stdaux(処理系依存) 標準補助入出力 補助入出力ポート
stdprn(処理系依存) 標準プリンタ出力 プリンタ

getchar、putchar、gets、puts、scanf、printfなどは、この標準入出力に対して入出力を行います。

[Quote]:http://www.bohyoh.com/CandCPP/C/Library/fflush.htmlhttp://www9.plala.or.jp/sgwr-t/lib/fflush.html

| BLOG TOP |
DATE: CATEGORY:C/C++ stdio.h
ファイルアクセス関数
freopen
ヘッダ #include "stdio.h"
形 式 FILE *freopen(const char *filename, const char *mode, FILE *stream);
機 能 freopen関数は、filenameが指す文字列を名前とするファイルをオープンし、そのファイルとstreamが指すストリームを結び付ける。mode実引数の使い方は、fopen関数の場合と同一とします。
 freopen関数は、まず指定されたストリームに結び付けられているファイルをクローズします。そのクローズの失敗は、無視します。そして指定されたストリームのエラー表示子とファイル終了表示子をクリアします。
返却値 freopen関数は、オープン操作が失敗したとき、空ポインタを返す。その他のときは、streamの値を返す。

【使用例】

/* 標準出力stdoutをtest.txtに置き換える */
#include

int main(void)
{
char filename[] = "test.txt";
FILE *stream;

/* stdoutをtest.txtに変更 */
if ((stream = freopen(filename, "w", stdout)) == NULL) {
fprintf(stderr, "%sがオープンできません。\n", filename);
return 1;
}

printf("この出力は%sに書込まれます。", filename);

fclose(stream);

return 0;
}

【実行結果】

test.txtに「この出力はtest.txtに書込まれます。」と出力。

[Quote]:http://www.bohyoh.com/CandCPP/C/Library/freopen.htmlhttp://www9.plala.or.jp/sgwr-t/lib/freopen.html

| BLOG TOP |

copyright © Manhattan life all rights reserved.Powered by FC2ブログ