freopen
, _wfreopen
파일 포인터를 다시 할당합니다. 더 안전한 버전의 함수를 사용할 수 있습니다. 를 참조하세요freopen_s
. _wfreopen_s
구문
FILE *freopen(
const char *path,
const char *mode,
FILE *stream
);
FILE *_wfreopen(
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
매개 변수
path
새 파일의 경로입니다.
mode
허용되는 액세스 형식입니다.
stream
FILE
구조체에 대한 포인터입니다.
반환 값
각 함수는 새로 열린 파일에 대한 포인터를 반환합니다. 오류가 발생하면 원래 파일이 닫히고 함수가 포인터 값을 반환합니다 NULL
. null 포인터이거나 stream
빈 문자열인 경우 path
filename
이러한 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. mode
계속해서 실행하도록 허용된 경우 이러한 함수는 errno
를 EINVAL
로 설정하고 NULL
을 반환합니다.
오류 코드에 대한 자세한 내용은 , , 및 를 참조하세요errno
._sys_nerr
_sys_errlist
_doserrno
설명
이러한 함수의 더 안전한 버전이 존재합니다. 다음_wfreopen_s
을 참조하세요freopen_s
.
함수는 freopen
현재 연결된 stream
파일을 닫고 지정한 파일에 path
다시 할당합니다stream
. _wfreopen
은 와이드 문자 버전의 _freopen
이며, _wfreopen
에 대한 path
및 mode
인수는 와이드 문자열입니다. 그렇지 않으면_wfreopen
과 _freopen
이 동일하게 작동합니다.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
일반 텍스트 루틴 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
정의된 _MBCS |
정의된 _UNICODE |
---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopen
은 보통 미리 열린 stdin
, stdout
및 stderr
파일을 사용자가 지정한 파일로 리디렉션하는 데 사용됩니다. 연결된 stream
새 파일은 다음과 같이 파일에 대해 요청된 mode
액세스 형식을 지정하는 문자 문자열로 열립니다.
mode |
Access |
---|---|
"r" |
읽기 위해 엽니다. 파일이 없거나 찾을 수 없는 경우 호출이 freopen 실패합니다. |
"w" |
쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다. |
"a" |
새 데이터를 파일에 쓰기 전에 EOF(파일 끝) 표식을 제거하지 않고 파일의 끝에 쓰기(추가)하기 위해 엽니다. 파일이 없는 경우 파일을 만듭니다. |
"r+" |
읽고 쓰기 위해 엽니다. 파일이 있어야 합니다. |
"w+" |
읽고 쓰기 위해 빈 파일을 엽니다. 파일이 있으면 이 파일의 내용은 삭제됩니다. |
"a+" |
읽고 추가하기 위해 엽니다. 추가 작업에는 새 데이터를 파일에 쓰기 전에 EOF 표식을 제거하는 작업이 포함됩니다. 쓰기가 완료된 후에는 EOF 표식이 복원되지 않습니다. 파일이 없는 경우 파일을 만듭니다. |
"w"
및 "w+"
형식은 기존 파일을 삭제할 수 있으므로 이 형식을 사용할 때는 주의합니다. C11부터 파일을 덮어쓰는 대신 파일이 있는 경우 함수에 추가 "x"
"w"
하거나 "w+"
실패할 수 있습니다.
파일이 "a"
또는 "a+"
액세스 형식으로 열려 있으면 모든 쓰기 작업이 파일 끝에서 발생합니다. 파일 포인터를 사용하거나 rewind
사용하여 fseek
위치를 변경할 수 있지만 쓰기 작업이 수행되기 전에 파일 포인터는 항상 파일의 끝으로 다시 이동됩니다. 따라서 기존 데이터를 덮어쓸 수 없습니다.
이 모드는 "a"
파일에 추가하기 전에 EOF 마커를 제거하지 않습니다. 추가 작업이 수행된 이후에는 MS-DOS TYPE 명령은 원래 EOF 표식까지만 데이터를 표시하고 파일에 추가된 데이터는 표시하지 않습니다. "a+"
모드에서는 파일에 추가하기 전에 EOF 표식을 제거합니다. 추가 후에는 MS-DOS TYPE 명령으로 파일의 모든 데이터를 표시합니다. "a+"
모드에서는 Ctrl+Z EOF 표식으로 종료되는 스트림 파일에 추가해야 합니다.
"r+"
, "w+"
또는 "a+"
액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용됩니다. 즉, 파일이 "업데이트"용으로 열립니다. 그러나 읽기와 쓰기 사이를 전환할 때 중간 fsetpos
fseek
rewind
또는 연산이 있어야 합니다. 원하는 경우 현재 위치를 또는 fseek
작업에 지정할 fsetpos
수 있습니다. 위의 값 외에도, 다음 문자 중 하나를 mode
문자열에 포함하여 새 줄에 대해 변환 모드를 지정할 수 있습니다.
mode 한정자 |
번역 모드 |
---|---|
t |
텍스트(변환됨) 모드에서 엽니다. |
b |
이진(변환되지 않은) 모드로 열기; 캐리지 리턴 및 줄 바꿈 문자와 관련된 번역은 표시되지 않습니다. |
텍스트(번역) 모드에서는 CR-LF(캐리지 리턴 라인 피드) 조합이 입력에서 LF(단일 줄 바꿈) 문자로 변환됩니다. LF 문자는 출력에서 CR-LF 조합으로 변환됩니다. 또한 CTRL+Z는 입력 시 파일 끝 문자로 변환됩니다. "a+"
를 통해 읽기용으로나 쓰기 및 읽기용으로 열려 있는 파일에서 런타임 라이브러리는 파일 끝에 Ctrl+Z가 있는지 확인하고 가능한 경우 이를 제거합니다. 파일 내에서 사용하고 fseek
ftell
이동하면 파일 끝부분에 부적절하게 동작할 수 fseek
있으므로 제거됩니다. ANSI 이식성을 원하는 경우 Microsoft 확장이므로 이 옵션을 사용하지 t
마세요.
지정되거나 b
지정mode
되지 않은 경우 t
기본 변환 모드는 전역 변수_fmode
에 의해 정의됩니다. t
또는 b
가 인수에 접두어로 추가되면 이 함수는 실행되지 못하고 NULL
을 반환합니다.
텍스트 및 이진 모드에 대한 자세한 내용은 텍스트 및 이진 모드 파일 I/O를 참조 하세요.
요구 사항
함수 | 필수 헤더 |
---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> 또는 <wchar.h> |
UWP(유니버설 Windows 플랫폼) 앱에서는 콘솔이 지원되지 않습니다. 콘솔에 연결된 표준 스트림 핸들, stdin
, stdout
및 stderr
은 UWP 앱의 C 런타임 함수에서 사용되기 전에 리디렉션되어야 합니다. 호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_freopen.c
// compile with: /W3
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
#include <stdio.h>
#include <stdlib.h>
FILE *stream;
int main( void )
{
// Reassign "stderr" to "freopen.out":
stream = freopen( "freopen.out", "w", stderr ); // C4996
// Note: freopen is deprecated; consider using freopen_s instead
if( stream == NULL )
fprintf( stdout, "error on freopen\n" );
else
{
fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );
fprintf( stream, "This will go to the file 'freopen.out'\n" );
fclose( stream );
}
system( "type freopen.out" );
}
successfully reassigned
This will go to the file 'freopen.out'
참고 항목
스트림 I/O
fclose
, _fcloseall
_fdopen
, _wfdopen
_fileno
fopen
, _wfopen
_open
, _wopen
_setmode