_fdopen、_wfdopen
低水準 I/O で開いたファイルでストリームを関連付けます。
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
パラメーター
fd
開いているファイルのファイル記述子を返します。mode
ファイル アクセスの種類。
戻り値
これらの関数は、オープン ストリームへのポインターを返します。 エラーが発生すると、NULL のポインター値を返します。 エラーが発生した場合、無効なパラメーター ハンドラーが パラメーターの検証"に説明されているように、呼び出されます。 不正なファイル記述子を示す、または EINVAL設定されます EBADFにも実行を続行 errno は mode が null ポインターであることを示します。
エラー コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
解説
_fdopen 関数は fdで識別される関連付けするため、バッファリングされ、書式設定する低水準 I/O で開いたファイルができます。ファイルと I/O ストリームを。 _wfdopen 関数は、_fdopen 関数のワイド文字バージョンです。_wfdopen 関数の引数 mode は、ワイド文字列です。 _wfdopen と _fdopen は別の方法で同様に動作します。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
mode の文字列は、ファイル、ファイル アクセスの種類を指定します。
文字列 mode を次の表に示すように、ファイルには、要求するアクセスの種類を指定します。
"r"
読み取り用に開きます。 ファイルが存在しない場合や見つからない場合、fopen 呼び出しは失敗します。"w"
書き込み用に空のファイルを開きます。 指定したファイルが既に存在すると、そのファイルの内容は破棄されます。"a"
ファイル (追加など) の末尾に書き込み用に開きます。 ファイルが存在しない場合は、作成します。"r+"
読み取りと書き込みの両方のモードで開きます。ファイルが存在している必要があります。"w+"
読み取りと書き込みの両方のモードで空のファイルを開きます。 指定したファイルが既に存在すると、そのファイルの内容は破棄されます。"a+"
読み取りと追加の両方のモードでファイルを開きます。 ファイルが存在しない場合は、作成します。
アクセスの種類が "a" または "a+" の場合にファイルを開くと、すべての書き込み操作はファイルの末尾から行われます。 ファイル ポインターは fseek または rewindを使用して位置を変更できますが、書き込み操作の前にファイルの末尾に、常に移動されます。 したがって、既存のデータは上書きされません。 "r+"、"w+"、または "a+" のいずれかのアクセスの種類を指定すると、読み取りと書き込みの両方を行うことができます (ファイルは "更新" モードで開きます)。 ただし、読み取りと書き込みを切り替える場合は、その前に fflush、fsetpos、fseek、または rewind のいずれかの関数を実行する必要があります。 必要に応じて fsetpos または fseek 操作の現在位置を指定できます。
上記の値に加え、改行文字の変換モードを指定するには、次の文字は、mode に含めることができます。
t
ファイルをテキスト (変換) モードで開きます。 このモードでは、キャリッジ リターンとライン フィード (CR-LF) の組み合わせは、入力の 1 ライン フィード (LF) に変換され、LF の文字が出力の CR-LF の組み合わせに変換されます。 または、Ctrl + Z は入力のファイルの終端の文字として解釈されます。 /書き込み用に読み取ることで開かれたファイルでは fopen がファイル末尾に Ctrl + Z があるかどうかを確認し、それを、可能な場合は削除します。 これは fseek と ftell 関数を使用すると、Ctrl キーで終わるファイル内で移動するには fseek ファイル末尾付近で実行される可能性があるためです。b
バイナリ (無変換) モードで開きます。 t モードの変換が適用されます。c
関連付けられた filename のコミット フラグを有効にして、fflush または _flushall のいずれかが呼び出された場合に、ファイル バッファーの内容がディスクに直接書き込まれるようにします。n
関連付けられた filename のコミット フラグを "コミットなし" にリセットします。これは、既定の設定です。 また、Commode.obj とプログラムをリンクしている場合、グローバル コミット フラグをオーバーライドします。 グローバルは Commode.obj とプログラムを明示的にリンクするフラグの既定のは「コミットなし」です。
t、cと n mode オプションは fopen と _fdopenの Microsoft 拡張機能です。 ANSI 互換を維持するには、これは使用しないでください。
t または b を mode に指定しないと、既定の変換モードは _fmode グローバル変数によって定義されます。 t または b を引数の先頭に指定すると、エラーが発生して NULL が返されます。 テキスト モードと binary モードの詳細については、「テキスト モードとバイナリ モードのファイル入出力」を参照してください。
fopen および _fdopen で使用される mode 文字列として有効な文字は、_open および _sopen で使用される oflag 引数と次のように対応しています。
mode の文字列の文字 |
_open/_sopenの oflag同等の値 |
---|---|
a |
_O_WRONLY | _O_APPEND (通常は _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (通常は _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (通常は _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR (通常は _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
なし。 |
n |
なし。 |
必要条件
関数 |
必須ヘッダー |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> または <wchar.h> |
互換性の詳細については、「互換性」を参照してください。
使用例
// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>
int main( void )
{
FILE *stream;
int fd, count = 0;
char inbuf[128];
// Open a file.
if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
exit( 1 );
// Get stream from file descriptor.
if( (stream = _fdopen( fd, "r" )) == NULL )
exit( 1 );
while( fgets( inbuf, 128, stream ) != NULL )
count++;
// After _fdopen, close by using fclose, not _close.
fclose( stream );
printf( "Lines in file: %d\n", count );
}
入力: crt_fdopen.txt
Line one
Line two
出力
Lines in file: 2
同等の .NET Framework 関数
System::IO::FileStream::FileStream