_fdopen, _wfdopen

하위 수준 I/O를 위해 이전에 연 파일에 스트림을 연결합니다.

구문

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

매개 변수

fd
열린 파일의 파일 설명자입니다.

mode
파일 액세스의 유형입니다.

반환 값

각 함수는 열린 스트림에 대한 포인터를 반환합니다. null 포인터 값은 오류를 나타냅니다. 오류가 발생하면 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 실행을 계속하도록 허용된 경우 errno는 잘못된 파일 설명자를 나타내는 EBADF로 설정하거나 mode가 null 포인터임을 나타내는 EINVAL로 설정합니다.

이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno_sys_nerr_sys_errlist를 참조하세요.errno

설명

_fdopen 함수는 fd로 식별되는 파일과 I/O 스트림을 연결하여 하위 수순 I/O로 열린 파일을 버퍼링하고 형식을 지정합니다. _wfdopen_fdopen의 와이드 문자 버전이며, mode 에 대한 _wfdopen 인수는 와이드 문자열입니다. 그렇지 않으면 _wfdopen_fdopen이 동일하게 작동합니다.

전달된 _fdopen 파일 설명자는 반환 FILE * 된 스트림에서 소유합니다. 성공하면 _fdopen 파일 설명자를 호출 _close 하지 마세요. 반환 FILE * 된 파일을 호출 fclose 하면 파일 설명자도 닫힙니다.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 변경하려면 CRT의 전역 상태를 참조하세요.

문자열은 mode 파일에 대해 요청된 파일 액세스의 형식을 지정합니다.

mode Access
"r" 읽기 위해 엽니다. 파일이 없거나 찾을 수 없는 경우 호출이 fopen 실패합니다.
"w" 쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.
"a" 파일의 끝에 쓰기를 위해 열립니다(추가). 파일이 없는 경우 파일을 만듭니다.
"r+" 읽고 쓰기 위해 엽니다. 파일이 있어야 합니다.
"w+" 읽고 쓰기 위해 빈 파일을 엽니다. 파일이 있으면 이 파일의 내용은 삭제됩니다.
"a+" 읽고 추가하기 위해 엽니다. 파일이 없는 경우 파일을 만듭니다.

파일이 "a" 또는 "a+" 액세스 형식으로 열려 있으면 모든 쓰기 작업이 파일 끝에서 발생합니다. 파일 포인터는 사용하거나 rewind사용하여 fseek 위치를 변경할 수 있지만 쓰기 작업이 수행되기 전에 항상 파일의 끝으로 다시 이동합니다. 따라서 기존 데이터를 덮어쓸 수 없습니다. "r+", "w+" 또는 "a+" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용됩니다. 즉, 파일이 "업데이트"용으로 열립니다. 그러나 읽기와 쓰기를 전환할 때는 사이에 fflush, fsetpos, fseek또는 rewind 작업이 있어야 합니다. 원하는 경우 fsetpos 또는 fseek에 현재 위치를 지정할 수 있습니다.

위의 값 외에도 다음 문자를 포함하여 줄 바꿈 문자에 mode 대한 변환 모드를 지정할 수도 있습니다.

mode 한정자 동작
t 텍스트(변환됨) 모드에서 엽니다. 이 모드에서는 CR-LF(캐리지 리턴 줄 바꿈) 조합은 입력 시 단일 LF(줄 바꿈)로 변환되고, LF 문자는 출력 시 CR-LF 조합으로 변환됩니다. 또한 CTRL+Z는 입력 시 파일 끝 문자로 변환됩니다.
b 이진(변환되지 않음) 모드에서 엽니다. t에서의 모든 변환은 표시되지 않습니다.
c filename 또는 fflush 을 호출하면 파일 버퍼의 내용이 디스크에 직접 기록되도록 연결된 _flushall 에 대한 커밋 플래그를 사용합니다.
n 연결된 filename "no-commit"에 대한 커밋 플래그를 다시 설정합니다. 이 플래그는 기본값입니다. 또한 프로그램을 Commode.obj.에 연결하는 경우 전역 커밋 플래그를 재정의합니다. 프로그램을 명시적으로 연결하지 않는 한 전역 커밋 플래그 기본값은 "no-commit"입니다 Commode.obj.

t, cnmode 옵션은 fopen_fdopen에 대한 Microsoft 확장입니다. ANSI 이식성을 유지하려는 경우 사용하지 마세요.

지정되거나 b 지정mode되지 않은 경우 t 기본 변환 모드는 전역 변수_fmode에 의해 정의됩니다. t 또는 b 가 인수에 접두어로 추가되면 이 함수는 실행되지 못하고 NULL을 반환합니다. 텍스트 및 이진 모드에 대한 자세한 내용은 텍스트 및 이진 모드 파일 I/O를 참조 하세요.

이 표와 fopen 같이 사용된 문자열의 유효한 문자 mode 이며 _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

참고 항목

스트림 I/O
_dup, _dup2
fclose, _fcloseall
fopen, _wfopen
freopen, _wfreopen
_open, _wopen