freopen_s
, _wfreopen_s
현재 연결된 oldStream
파일을 닫고 지정한 파일에 fileName
다시 할당합니다stream
.
이러한 버전은 CRT의 _wfreopen
freopen
보안 기능에 설명된 대로 향상된 보안 기능을 제공합니다.
구문
errno_t freopen_s(
FILE ** stream,
const char * fileName,
const char * mode,
FILE* oldStream
);
errno_t _wfreopen_s(
FILE ** stream,
const wchar_t * fileName,
const wchar_t * mode,
FILE * oldStream
);
매개 변수
stream
함수가 반환될 때 다시 연 스트림을 가리키는 out 매개 변수입니다.
fileName
다시 열 파일의 경로입니다.
mode
다시 연 스트림의 모드입니다.
oldStream
다시 열 스트림입니다. 플러시되고 연결된 모든 파일이 닫힙니다.
반환 값
성공 0; 그렇지 않으면 오류 코드입니다. 오류가 발생하면 원래 파일이 닫히고 NULL
그렇지 않은 한 stream
기록 stream
됩니다.NULL
오류 코드에 대한 자세한 내용은 , , 및 를 참조하세요errno
._sys_nerr
_sys_errlist
_doserrno
설명
이 freopen_s
함수는 일반적으로 연결된 stdin
stdout
stderr
미리 열린 스트림을 다른 파일에 연결하는 데 사용됩니다.
함수는 freopen_s
현재 연결된 stream
파일을 닫고 지정한 파일에 path
다시 할당합니다stream
. _wfreopen_s
은 와이드 문자 버전의 freopen_s
이며, _wfreopen_s
에 대한 path
및 mode
인수는 와이드 문자열입니다. 그렇지 않으면_wfreopen_s
과 freopen_s
이 동일하게 작동합니다.
, path
또는 NULL
stream
mode
빈 문자열이 pFile
있는 경우 path
이러한 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우 이러한 함수는 errno
를 EINVAL
로 설정하고 EINVAL
을 반환합니다.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
일반 텍스트 루틴 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
정의된 _MBCS |
정의된 _UNICODE |
---|---|---|---|
_tfreopen_s |
freopen_s |
freopen_s |
_wfreopen_s |
freopen_s
은 보통 미리 열린 stdin
, stdout
및 stderr
파일을 사용자가 지정한 파일로 리디렉션하는 데 사용됩니다. 연결된 stream
새 파일은 다음과 같이 파일에 대해 요청된 mode
액세스 형식을 지정하는 문자 문자열로 열립니다.
mode |
Access |
---|---|
"r" |
읽기 위해 엽니다. 파일이 없거나 찾을 수 없는 경우 호출이 freopen_s 실패합니다. |
"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_s |
<stdio.h> |
_wfreopen_s |
<stdio.h> 또는 <wchar.h> |
UWP(유니버설 Windows 플랫폼) 앱에서는 콘솔이 지원되지 않습니다. 콘솔에 연결된 표준 스트림 핸들, stdin
, stdout
및 stderr
은 UWP 앱의 C 런타임 함수에서 사용되기 전에 리디렉션되어야 합니다.
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_freopen_s.c
// 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 )
{
errno_t err;
// Reassign "stderr" to "freopen.out":
err = freopen_s( &stream, "freopen.out", "w", stderr );
if( err != 0 )
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'
참고 항목
Stream I/O
freopen
, _wfreopen
fclose
, _fcloseall
_fdopen
, _wfdopen
_fileno
fopen
, _wfopen
_open
, _wopen
_setmode