_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
, c
및 n
mode
옵션은 Microsoft 확장용 fopen
및 _fdopen
. 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 |
None |
n |
None |
요구 사항
함수 | 필수 헤더 | 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