freopen_s, _wfreopen_s

현재 연결된 oldStream 파일을 닫고 지정한 파일에 fileName다시 할당합니다stream.

이러한 버전은 CRT_wfreopenfreopen 보안 기능에 설명된 대로 향상된 보안 기능을 제공합니다.

구문

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 함수는 일반적으로 연결된 stdinstdoutstderr 미리 열린 스트림을 다른 파일에 연결하는 데 사용됩니다.

함수는 freopen_s 현재 연결된 stream 파일을 닫고 지정한 파일에 path다시 할당합니다stream. _wfreopen_s은 와이드 문자 버전의 freopen_s이며, _wfreopen_s에 대한 pathmode 인수는 와이드 문자열입니다. 그렇지 않으면_wfreopen_sfreopen_s 이 동일하게 작동합니다.

, path또는 NULLstreammode빈 문자열이 pFile있는 경우 path 이러한 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우 이러한 함수는 errnoEINVAL로 설정하고 EINVAL을 반환합니다.

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

일반 텍스트 루틴 매핑

TCHAR.H 루틴 _UNICODE 정의 _MBCS 되지 않음 _MBCS 정의 _UNICODE 정의
_tfreopen_s freopen_s freopen_s _wfreopen_s

freopen_s은 보통 미리 열린 stdin, stdoutstderr 파일을 사용자가 지정한 파일로 리디렉션하는 데 사용됩니다. 연결된 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+" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용됩니다. 즉, 파일이 "업데이트"용으로 열립니다. 그러나 읽기와 쓰기 사이를 전환할 때 중간 fsetposfseekrewind 또는 연산이 있어야 합니다. 원하는 경우 현재 위치를 또는 fseek 작업에 지정할 fsetpos 수 있습니다. 위의 값 외에도, 다음 문자 중 하나를 mode 문자열에 포함하여 새 줄에 대해 변환 모드를 지정할 수 있습니다.

mode 한정자 번역 모드
t 텍스트(변환됨) 모드에서 엽니다.
b 이진(변환되지 않은) 모드로 열기; 캐리지 리턴 및 줄 바꿈 문자와 관련된 번역은 표시되지 않습니다.

텍스트(번역) 모드에서는 CR-LF(캐리지 리턴 라인 피드) 조합이 입력에서 LF(단일 줄 바꿈) 문자로 변환됩니다. LF 문자는 출력에서 CR-LF 조합으로 변환됩니다. 또한 CTRL+Z는 입력 시 파일 끝 문자로 변환됩니다. "a+"를 통해 읽기용으로나 쓰기 및 읽기용으로 열려 있는 파일에서 런타임 라이브러리는 파일 끝에 Ctrl+Z가 있는지 확인하고 가능한 경우 이를 제거합니다. 파일 내에서 사용하고 fseekftell 이동하면 파일 끝부분에 부적절하게 동작할 수 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 플랫폼) 앱에서 지원되지 않습니다. C 런타임 함수가 UWP 앱에서 사용할 수 있기 전에 콘솔stdinstdout, 및 , 및stderr와 연결된 표준 스트림 핸들을 리디렉션해야 합니다.

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// 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