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 빈 문자열인 경우 pathfilename 이러한 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. mode 계속해서 실행하도록 허용된 경우 이러한 함수는 errnoEINVAL로 설정하고 NULL을 반환합니다.

오류 코드에 대한 자세한 내용은 , , 및 를 참조하세요errno._sys_nerr_sys_errlist_doserrno

설명

이러한 함수의 더 안전한 버전이 존재합니다. 다음_wfreopen_s을 참조하세요freopen_s.

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

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

일반 텍스트 루틴 매핑

TCHAR.H 루틴 _UNICODE 정의 _MBCS 되지 않음 _MBCS 정의 _UNICODE 정의
_tfreopen freopen freopen _wfreopen

freopen은 보통 미리 열린 stdin, stdoutstderr 파일을 사용자가 지정한 파일로 리디렉션하는 데 사용됩니다. 연결된 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+" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용됩니다. 즉, 파일이 "업데이트"용으로 열립니다. 그러나 읽기와 쓰기 사이를 전환할 때 중간 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 <stdio.h>
_wfreopen <stdio.h> 또는 <wchar.h>

콘솔은 UWP(유니버설 Windows 플랫폼) 앱에서 지원되지 않습니다. C 런타임 함수가 UWP 앱에서 사용할 수 있기 전에 콘솔stdinstdout, 및 , 및stderr와 연결된 표준 스트림 핸들을 리디렉션해야 합니다. 호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

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