freopen, fdreopen - ファイルの再オープン

【書式】

#include <stdio.h>

FILE *freopen(const char *filename, const char *mode, FILE *fp);

FILE *fdreopen(int fd, const char *mode, FILE *fp);

【解説】

freopen()はfopen(3)と同様にfilename で示されるファイルをオープンしま

すが、ファイルポインタを指定できる点が異なっています。

fdreopen() もfdopen(3)と同様にハンドルfdを高レベル入出力用のファイル

ポインタに結びつけますが、使用するファイルポインタを指定することがで

きます。

freopen(), fdreopen()はそのファイルポインタがすでにオープンされてい

れば一旦クローズしてからオープンしますが、クローズに失敗しても無視し

てオープンします。

文字列modeはfopen(3)と同じく、次のうちのいずれか1 つでなければなりま

せん。

"r"

テキストファイルを入力モードでオープンします

"w"

新しいテキストファイルを作り、出力モードでオープンします。すでに

同じ名前のファイルがある場合はその内容は捨てられます

"a"

テキストファイルを追加・出力モードでオープンします。ファイルがな

い場合は新たにファイルを作ります

"rb"

バイナリファイルを入力モードでオープンします

"wb"

新しいバイナリファイルを作り、出力モードでオープンします。すでに

同じ名前のファイルがある場合はその内容は捨てられます

"ab"

バイナリファイルを追加・出力モードでオープンします。ファイルがな

い場合は新たにファイルを作ります

"r+"

テキストファイルを入出力モードでオープンします

"w+"

新しいテキストファイルを作り、入出力モードでオープンします。すで

に同じ名前のファイルがある場合はその内容は捨てられます

"a+"

テキストファイルを追加・入出力モードでオープンします。ファイルが

ない場合は新たにファイルを作ります

"r+b"

バイナリファイルを入出力モードでオープンします

"w+b"

新しいバイナリファイルを作り、入出力モードでオープンします。すで

に同じ名前のファイルがある場合はその内容は捨てられます

"a+b"

バイナリファイルを追加・入出力モードでオープンします。ファイルが

ない場合は新たにファイルを作ります

テキストファイルとしてオープンされた場合、入力時には'\r'は読み飛ばさ

れ、'\x1A'に当たるとファイルの終わりと見なします。また出力時には'\n'

の前に'\r'が挿入されます。

バイナリファイルとしてオープンされた場合には、入力時も出力時もいっさ

い変換はおこなわれません。

入力モードでは読み込みだけ、出力モードでは書き込みだけ、入出力モード

では読み書きの両方が許されます。

モード"a", "ab", "a+", "a+b"でオープンした場合には、書き込みの直前に

必ず EOFにシークします。したがって、このモードではデータの追加のみが

可能で、元のデータをオーバーライトすることはできません。

【リターン値】

成功するとパラメタfpをそのまま返します。失敗すると値NULLを返します。

【可搬性】

freopen()

ANSI, UNIX, DOS窓

fdreopen()

DOS窓

【参照】

fopen(3), fclose(3), open(3), creat(3)

【copyright (c) 安江正樹@東海大学理学部物理学科】