_fdopen
, _wfdopen
ストリームを前回下位入出力で開いたファイルに関連付けます。
構文
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
パラメーター
fd
開いているファイルのファイル記述子。
mode
ファイル アクセスの種類。
戻り値
これらの各関数は、開いているストリームへのポインターを返します。 エラーが発生すると、NULL のポインター値を返します。 エラーが発生すると、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、errno
は EBADF
に設定されて無効なファイル記述子であることを示すか、EINVAL
に設定されて mode
が null ポインターだったことを示すかのいずれかになります。
これらのエラー コードやその他のエラー コードについては、「errno
、_doserrno
、_sys_errlist
、および _sys_nerr
」を参照してください。
解説
_fdopen
関数は、fd
によって識別されるファイルに入出力ストリームを関連付けることにより、下位入出力で開かれているファイルをバッファーおよびフォーマットできるようにします。 _wfdopen
関数は、 _fdopen
関数のワイド文字バージョンです。 mode
関数の引数 _wfdopen
は、ワイド文字列です。 それ以外では、_wfdopen
と _fdopen
の動作は同じです。
渡された _fdopen
ファイル記述子は、返される FILE *
ストリームによって所有されます。 成功した場合 _fdopen
は、ファイル記述子を呼び出 _close
さないでください。 返されたFILE *
ファイルを呼び出すとfclose
、ファイル記述子も閉じます。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 これを変更するには、「CRT でのグローバル状態」を参照してください。
この文字列は mode
、ファイルに対して要求されるファイル アクセスの種類を指定します。
mode |
アクセス |
---|---|
"r" |
読み取り用に開きます。 ファイルが存在しないか、見つからない場合、呼び出しは fopen 失敗します。 |
"w" |
書き込み用に空のファイルを開きます。 指定したファイルが既に存在すると、そのファイルの内容は破棄されます。 |
"a" |
末尾に書き込まれるようにファイルを開きます (追加モード)。 ファイルが存在しない場合は、作成します。 |
"r+" |
読み取りと書き込みの両方のモードで開きます。 ファイルが存在する必要があります。 |
"w+" |
読み取りと書き込みの両方のモードで空のファイルを開きます。 そのファイルが既に存在すると、そのファイルの内容は破棄されます。 |
"a+" |
読み取りと追加の両方のモードでファイルを開きます。 ファイルが存在しない場合は、作成します。 |
アクセスの種類 "a"
または "a+"
を使用してファイルを開くと、すべての書き込み操作はファイルの末尾から行われます。 ファイル ポインターは、またはrewind
を使用fseek
して再配置できますが、書き込み操作が実行される前に常にファイルの末尾に戻ります。したがって、既存のデータを上書きすることはできません。 "r+"
、"w+"
、または "a+"
のいずれかのアクセスの種類を指定すると、読み取りと書き込みの両方を行うことができます (ファイルは "更新" モードで開きます)。 ただし、読み取りと書き込みを切り替える場合は、その前に fflush
、fsetpos
、fseek
、または rewind
のいずれかの操作を実行する必要があります。 必要であれば、fsetpos
または fseek
操作の現在の位置を指定できます。
上記の値に加えて、次の文字を含 mode
めて改行文字の変換モードを指定することもできます。
mode modifier |
動作 |
---|---|
t |
ファイルをテキスト (変換) モードで開きます。 このモードでは、復帰と改行 (CR-LF) の組み合わせは入力時に 1 つの改行 (LF) 文字に変換され、LF 文字は出力時に CR-LF の組み合わせに変換されます。 また、Ctrl + Z は入力時に EOF (end-of-file) 文字として解釈されます。 |
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
が返されます。 テキストモードとバイナリモードの詳細については、テキストモードおよびバイナリモードファイルI/Oを参照してください。
次の表に示すように、使用されるmode
fopen
文字列の有効な文字と_fdopen
、使用される_open
引数に_sopen
対応oflag
します。
mode 文字列の文字 |
とに相当するoflag _open 値_sopen |
---|---|
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 |
なし |
必要条件
機能 | 必須ヘッダー | C++ ヘッダー |
---|---|---|
_fdopen |
<stdio.h> |
<cstdio> |
_wfdopen |
<stdio.h> または <wchar.h> |
<cstdio> |
C ランタイム ライブラリの標準準拠と名前付け規則の詳細については、「互換性」を参照してください。
汎用テキスト ルーチンのマップ
<tchar.h> ルーチン |
_UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
例
// 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
関連項目
ストリーム入出力
_dup
, _dup2
fclose
, _fcloseall
fopen
, _wfopen
freopen
, _wfreopen
_open
, _wopen
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示