_fdopen, _wfdopen_fdopen, _wfdopen

하위 수준 I/O를 위해 이전에 연 파일에 스트림을 연결합니다.Associates a stream with a file that was previously opened for low-level I/O.

구문Syntax

FILE *_fdopen(
   int fd,
   const char *mode
);
FILE *_wfdopen(
   int fd,
   const wchar_t *mode
);

매개 변수Parameters

fdfd
열린 파일의 파일 설명자입니다.File descriptor of the open file.

modemode
파일 액세스의 유형입니다.Type of file access.

Return ValueReturn Value

각 함수는 열린 스트림에 대한 포인터를 반환합니다.Each of these functions returns a pointer to the open stream. null 포인터 값은 오류를 나타냅니다.A null pointer value indicates an error. 오류가 발생하는 경우 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다.When an error occurs, the invalid parameter handler is invoked, as described in Parameter Validation. 계속 해 서 실행 하도록 허용한 경우 errnoebadf로 설정 됩니다 .이는 잘못 된 파일 설명자를 나타내는 EINVAL이 고, 해당 모드가 null 포인터 임을 나타내는입니다.If execution is allowed to continue, errno is set either to EBADF, which indicates a bad file descriptor, or EINVAL, which indicates that mode was a null pointer.

이 오류 및 다른 오류 코드에 대한 자세한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr를 참조하세요.For more information about these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

설명Remarks

_Fdopen 함수는 fd로 식별 되는 파일과 i/o 스트림을 연결 하 여 하위 수준 i/o에 대해 열린 파일을 버퍼링 하 고 형식을 지정할 수 있도록 합니다.The _fdopen function associates an I/O stream with the file that is identified by fd, and thus allows a file that is opened for low-level I/O to be buffered and formatted. _wfdopen_fdopen의 와이드 문자 버전입니다. _wfdopen 에 대 한 모드 인수는 와이드 문자 문자열입니다._wfdopen is a wide-character version of _fdopen; the mode argument to _wfdopen is a wide-character string. _wfdopen_fdopen 는 동일 하 게 동작 합니다._wfdopen and _fdopen otherwise behave identically.

_Fdopen 에 전달 된 파일 설명자는 반환 된 파일 * 스트림이 소유 합니다.File descriptors passed into _fdopen are owned by the returned FILE * stream. _Fdopen 성공적으로 수행 되 면 파일 설명자에서 _close 를 호출 하지 마세요.If _fdopen is successful, do not call _close on the file descriptor. 반환 된 파일에서 fclose 를 호출 * 파일 설명자도 닫힙니다.Calling fclose on the returned FILE * also closes the file descriptor.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

제네릭 텍스트 라우팅 매핑Generic-Text Routine Mappings

Tchar.h 루틴Tchar.h routine _유니코드 및 _MBCS가 정의 되지 않음_UNICODE and _MBCS not defined _MBCS 정의_MBCS defined _유니코드 정의_UNICODE defined
_tfdopen_tfdopen _fdopen_fdopen _fdopen_fdopen _wfdopen_wfdopen

모드 문자열은 파일에 대해 요청 되는 파일 액세스의 유형을 지정 합니다.The mode character string specifies the type of file access requested for the file:

modemode 액세스 권한Access
&"r" 읽기 위해 엽니다.Opens for reading. 파일이 없거나 찾을 수 없는 경우 fopen 호출이 실패 합니다.If the file does not exist or cannot be found, the fopen call fails.
w"w" 쓰기 위해 빈 파일을 엽니다.Opens an empty file for writing. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.If the given file exists, its contents are destroyed.
"a" 파일의 끝에서 쓰기 위해 엽니다 (추가).Opens for writing at the end of the file (appending). 파일이 없는 경우 파일을 만듭니다.Creates the file if it does not exist.
"r +""r+" 읽고 쓰기 위해 엽니다.Opens for both reading and writing. 파일이 있어야 합니다.The file must exist.
"w +""w+" 읽고 쓰기 위해 빈 파일을 엽니다.Opens an empty file for both reading and writing. 파일이 있으면 이 파일의 내용은 삭제됩니다.If the file exists, its contents are destroyed.
"a +""a+" 읽고 추가하기 위해 엽니다.Opens for reading and appending. 파일이 없는 경우 파일을 만듭니다.Creates the file if it does not exist.

파일이 "a" 또는 "a +" 액세스 형식으로 열리면 모든 쓰기 작업이 파일 끝에서 발생 합니다.When a file is opened with the "a" or "a+" access type, all write operations occur at the end of the file. Fseek 또는 되감기를 사용 하 여 파일 포인터의 위치를 변경할 수 있지만 쓰기 작업을 수행 하기 전에 항상 파일 끝으로 다시 이동 합니다. 따라서 기존 데이터를 덮어쓸 수 없습니다.The file pointer can be repositioned by using fseek or rewind, but it is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten. "R +", "w +" 또는 "a +" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용 됩니다. 즉, 파일이 "업데이트" 용으로 열립니다.When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for "update"). 그러나 읽기와 쓰기를 전환할 때는 중간에 fflush, fsetpos, fseek또는 되감기 작업이 있어야 합니다.However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. 원하는 경우 fsetpos 또는 fseek 작업의 현재 위치를 지정할 수 있습니다.You can specify the current position for the fsetpos or fseek operation, if you want to.

위의 값 외에도 다음 문자를 모드 에 포함 하 여 줄 바꿈 문자에 대 한 변환 모드를 지정할 수 있습니다.In addition to the above values, the following characters can also be included in mode to specify the translation mode for newline characters:

모드 한정자mode modifier 동작Behavior
t 텍스트(변환됨) 모드에서 엽니다.Open in text (translated) mode. 이 모드에서는 CR-LF(캐리지 리턴 줄 바꿈) 조합은 입력 시 단일 LF(줄 바꿈)로 변환되고, LF 문자는 출력 시 CR-LF 조합으로 변환됩니다.In this mode, carriage return-line feed (CR-LF) combinations are translated into one-line feeds (LF) on input, and LF characters are translated to CR-LF combinations on output. 또한 CTRL+Z는 입력 시 파일 끝 문자로 변환됩니다.Also, Ctrl+Z is interpreted as an end-of-file character on input.
bb 이진(변환되지 않음) 모드에서 엽니다.Open in binary (untranslated) mode. T 모드에서의 모든 변환은 표시 되지 않습니다.Any translations from t mode are suppressed.
cc Fflush 또는 _flushall 가 호출 되는 경우 파일 버퍼의 내용이 디스크에 직접 기록 되도록 연결 된 파일 이름 에 대 한 커밋 플래그를 사용 하도록 설정 합니다.Enable the commit flag for the associated filename so that the contents of the file buffer are written directly to disk if either fflush or _flushall is called.
nn 관련 파일 이름 에 대 한 커밋 플래그를 "커밋 안 함"으로 다시 설정 합니다.Reset the commit flag for the associated filename to "no-commit." 기본값입니다.This is the default. 또한 프로그램을 Commode .obj와 연결 하는 경우 전역 커밋 플래그를 재정의 합니다. 프로그램을 Commode .obj와 명시적으로 연결 하지 않는 한 전역 커밋 플래그 기본값은 "커밋 안 함"입니다.It also overrides the global commit flag if you link your program with Commode.obj. The global commit flag default is "no-commit" unless you explicitly link your program with Commode.obj.

T, cn 모드 옵션은 fopen_fdopen에 대 한 Microsoft 확장입니다.The t, c, and n mode options are Microsoft extensions for fopen and _fdopen. ANSI 이식성을 유지하려는 경우에는 사용하지 마세요.Do not use them if you want to preserve ANSI portability.

모드에서 t 또는 b 를 지정 하지 않은 경우 기본 변환 모드는 전역 변수 _fmode에 의해 정의 됩니다.If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. T 또는 b 가 인수 앞에 있으면 함수가 실패 하 고 NULL을 반환 합니다.If t or b is prefixed to the argument, the function fails and returns NULL. 텍스트 모드와 이진 모드에 대한 자세한 내용은 텍스트 및 이진 모드 파일 I/O를 참조하세요.For a discussion of text and binary modes, see Text and Binary Mode File I/O.

다음 표에서와 같이 fopen_fdopen 에 사용 되는 모드 문자열에 유효한 문자는 _open _sopen에 사용 되는 oflag 인수에 해당 합니다.Valid characters for the mode string used in fopen and _fdopen correspond to oflag arguments used in _open and _sopen, as shown in this table:

모드 문자열의 문자Characters in mode string _Open_sopen 에 상응 하 는 값이 있습니다.Equivalent oflag value for _open and _sopen
a _O_WRONLY | _o_append (일반적 ** _으로_o WRONLY _|_o 만들기 _|_o 추가**)_O_WRONLY | _O_APPEND (usually _O_WRONLY | _O_CREAT | _O_APPEND)
a +a+ _O_rdwr | _o_append (일반적으로 ** _o_rdwr _|_o 추가 _|_o** )_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT )
rr _O_RDONLY_O_RDONLY
r +r+ _O_RDWR_O_RDWR
ww _O_WRONLY (일반적 ** _으로_o WRONLY _|_o | _o_TRUNC**)_O_WRONLY (usually _O_WRONLY | _O_CREAT | _O_TRUNC)
w +w+ _O_rdwr (일반적 ** _으로_o rdwr _|_o | _o_TRUNC**)_O_RDWR (usually _O_RDWR | _O_CREAT | _O_TRUNC)
bb _O_이진_O_BINARY
t _O_텍스트_O_TEXT
cc 없음None
nn 없음None

요구 사항Requirements

기능Function 필수 헤더Required header
_fdopen_fdopen <stdio.h><stdio.h>
_wfdopen_wfdopen <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h>

호환성에 대한 자세한 내용은 Compatibility을 참조하세요.For more compatibility information, see Compatibility.

예제Example

// 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.txtInput: crt_fdopen.txt

Line one
Line two

출력Output

Lines in file: 2

참조See also

스트림 I/OStream I/O
_dup, _dup2_dup, _dup2
fclose, _fcloseallfclose, _fcloseall
fopen, _wfopenfopen, _wfopen
freopen, _wfreopenfreopen, _wfreopen
_열기, _wopen_open, _wopen