_fdopen、_wfdopen
stdio.h:インデックス への移動
ヘッダー ファイル
stdio.h
カテゴリ
入出力ルーチン
プロトタイプ
FILE *_fdopen(int handle, char *type);
FILE *_wfdopen(int handle, wchar_t *type);
説明
ストリームをファイル ハンドルに関連付けます。
_fdopen は、creat、dup、dup2、または open から取得したファイル ハンドルにストリームを関連付けます。
ストリームのタイプは開いているハンドルのモードと一致していなければなりません。
_fdopen の呼び出しで使用する type 文字列には以下のいずれかの値を指定します。
r |
読み取り専用で開きます。 ファイルを開けない場合、_fdopen は NULL を返します。 |
w |
書き込み用に作成します。 ファイルが既に存在する場合、その内容は上書きされます。 |
a |
追加します。つまり、ファイル終端へ書き込めるように開くか、ファイルが存在しない場合には書き込み用に作成します。 |
r+ |
既存ファイルを更新(読み取りおよび書き込み)用に開きます。 ファイルを開けない場合、_fdopen は NULL を返します。 |
w+ |
新しいファイルを更新用に作成します。 ファイルが既に存在する場合、その内容は上書きされます。 |
a+ |
追加用に開きます。つまり、ファイル終端で更新できるように開くか、ファイルが存在しない場合には更新用に作成します。 |
ファイルをテキスト モードで開くまたは作成するよう指定するには、type 文字列の値の後に t を追加します(rt、w+t など)。
同様に、バイナリ モードを指定するには、type 文字列の後に b を追加します(rb、w+b など)。
type 文字列に t も b も指定されていない場合、モードはグローバル変数 _fmode によって決まります。
_fmode が O_BINARY に設定されている場合、ファイルはバイナリ モードで開かれます。
_fmode が O_TEXT に設定されている場合、ファイルはテキスト モードで開かれます。
メモ:O_... で始まる定数は fcntl.h で定義されています。
ファイルを更新用に開くと、そのストリームに対して入力と出力の両方を行うことができます。ただし、
- 出力の直後に入力を行うことはできません。間に fseek または rewind を行う必要があります。
- 入力の直後に出力を行うことはできません。間に fseek または rewind を行うか、入力がファイル終端(EOF)に到達している必要があります。
戻り値
正常に終了した場合、_fdopen は新しく開いたストリームのポインタを返します。 エラーの場合には NULL を返します。
例
#include <sys\stat.h> #include <stdio.h> #include <fcntl.h> #include <io.h> int main(void) { int handle; FILE *stream; /* open a file */ handle = open("DUMMY.FIL", O_CREAT | O_WRONLY, S_IREAD | S_IWRITE); /* now turn the handle into a stream */ stream = fdopen(handle, "w"); if (stream == NULL) printf("fdopen failed\n"); else { fprintf(stream, "Hello world\n"); fclose(stream); } return 0; }
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
_fdopen |
+ |
+ |
||
_wfdopen |
+ |