freopen, _wfreopenfreopen, _wfreopen

파일 포인터를 다시 할당합니다.Reassigns a file pointer. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. freopen_s, _wfreopen_s를 참조하세요.More secure versions of these functions are available; see freopen_s, _wfreopen_s.

구문Syntax

FILE *freopen(
   const char *path,
   const char *mode,
   FILE *stream
);
FILE *_wfreopen(
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream
);

매개 변수Parameters

pathpath
새 파일의 경로입니다.Path of new file.

modemode
허용되는 액세스 형식입니다.Type of access permitted.

스트림stream
FILE 구조체에 대한 포인터입니다.Pointer to FILE structure.

Return ValueReturn Value

각 함수는 새로 열린 파일에 대한 포인터를 반환합니다.Each of these functions returns a pointer to the newly opened file. 오류가 발생 하면 원래 파일이 닫히고 함수에서 NULL 포인터 값을 반환 합니다.If an error occurs, the original file is closed and the function returns a NULL pointer value. Path, mode또는 stream 이 null 포인터인 경우 또는 filename 이 빈 문자열인 경우 이러한 함수는 매개 변수 유효성 검사에 설명 된 대로 잘못 된 매개 변수 처리기를 호출 합니다.If path, mode, or stream is a null pointer, or if filename is an empty string, these functions invoke the invalid parameter handler, as described in Parameter Validation. 계속 해 서 실행 하도록 허용한 경우 이러한 함수는 errnoEINVAL 로 설정 하 고 NULL을 반환 합니다.If execution is allowed to continue, these functions set errno to EINVAL and return NULL.

이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr를 참조하세요.See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, error codes.

설명Remarks

이러한 함수의 더 안전한 버전이 있습니다. freopen_s, _wfreopen_s를 참조하세요.More secure versions of these functions exist, see freopen_s, _wfreopen_s.

Freopen 함수는 현재 스트림과 연결 된 파일을 닫고 경로에 지정 된 파일에 스트림을 다시 할당 합니다.The freopen function closes the file currently associated with stream and reassigns stream to the file specified by path. _wfreopen_freopen의 와이드 문자 버전입니다. _wfreopen 에 대 한 경로모드 인수는 와이드 문자 문자열입니다._wfreopen is a wide-character version of _freopen; the path and mode arguments to _wfreopen are wide-character strings. _wfreopen_freopen 는 동일 하 게 동작 합니다._wfreopen and _freopen behave identically otherwise.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

제네릭 텍스트 라우팅 매핑Generic-Text Routine Mappings

TCHAR.H 루틴TCHAR.H routine _UNICODE 및 _MBCS 정의되지 않음_UNICODE & _MBCS not defined _MBCS 정의됨_MBCS defined _UNICODE 정의됨_UNICODE defined
_tfreopen_tfreopen freopenfreopen freopenfreopen _wfreopen_wfreopen

freopen 은 일반적으로 미리 열린 파일 stdin, stdoutstderr 을 사용자가 지정한 파일로 리디렉션하는 데 사용 됩니다.freopen is typically used to redirect the pre-opened files stdin, stdout, and stderr to files specified by the user. 스트림과 연결 된 새 파일은 다음과 같이 파일에 대해 요청 된 액세스 형식을 지정 하는 문자열인 모드를 사용 하 여 열립니다.The new file associated with stream is opened with mode, which is a character string specifying the type of access requested for the file, as follows:

modemode 액세스 권한Access
&"r" 읽기 위해 엽니다.Opens for reading. 파일이 없거나 찾을 수 없는 경우 freopen 호출이 실패 합니다.If the file does not exist or cannot be found, the freopen call fails.
w"w" 쓰기 위해 빈 파일을 엽니다.Opens an empty file for writing. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.If the given file exists, its contents are destroyed.
"a" 새 데이터를 파일에 쓰기 전에 EOF(파일 끝) 표식을 제거하지 않고 파일의 끝에 쓰기(추가)하기 위해 엽니다.Opens for writing at the end of the file (appending) without removing the end-of-file (EOF) marker before new data is written to the file. 파일이 없는 경우 파일을 만듭니다.Creates the file if it does not exist.
"r +""r+" 읽고 쓰기 위해 엽니다.Opens for both reading and writing. 파일이 있어야 합니다.The file must exist.
"w +""w+" 읽고 쓰기 위해 빈 파일을 엽니다.Opens an empty file for both reading and writing. 파일이 있으면 이 파일의 내용은 삭제됩니다.If the file exists, its contents are destroyed.
"a +""a+" 읽고 추가하기 위해 엽니다.Opens for reading and appending. 추가 작업에는 새 데이터를 파일에 쓰기 전에 EOF 표식을 제거하는 작업이 포함됩니다.The appending operation includes the removal of the EOF marker before new data is written to the file. 쓰기 완료 후 EOF 표식이 복원되지 않습니다.The EOF marker is not restored after writing is completed. 파일이 없는 경우 파일을 만듭니다.Creates the file if it does not exist.

기존 파일을 삭제할 수 있으므로 "w""w +" 형식을 주의 해 서 사용 해야 합니다.Use the "w" and "w+" types with care, as they can destroy existing files.

파일이 "a" 또는 "a +" 액세스 형식으로 열리면 모든 쓰기 작업이 파일 끝에서 발생 합니다.When a file is opened with the "a" or "a+" access type, all write operations take place at the end of the file. Fseek 또는 되감기를 사용 하 여 파일 포인터의 위치를 변경할 수 있지만, 파일 포인터는 쓰기 작업을 수행 하기 전에 항상 파일 끝으로 다시 이동 합니다. 따라서 기존 데이터를 덮어쓸 수 없습니다.Although the file pointer can be repositioned using fseek or rewind, the file pointer is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten.

"A" 모드에서는 파일에 추가 하기 전에 EOF 표식을 제거 하지 않습니다.The "a" mode does not remove the EOF marker before appending to the file. 추가 작업이 수행된 이후에는 MS-DOS TYPE 명령은 원래 EOF 표식까지만 데이터를 표시하고 파일에 추가된 데이터는 표시하지 않습니다.After appending has occurred, the MS-DOS TYPE command only shows data up to the original EOF marker and not any data appended to the file. "A +" 모드에서는 파일에 추가 하기 전에 EOF 표식을 제거 합니다.The "a+" mode does remove the EOF marker before appending to the file. 추가 후에는 MS-DOS TYPE 명령으로 파일의 모든 데이터를 표시합니다.After appending, the MS-DOS TYPE command shows all data in the file. "A +" 모드는 CTRL + Z EOF 표식으로 종료 되는 스트림 파일에 추가 하는 데 필요 합니다.The "a+" mode is required for appending to a stream file that is terminated with the CTRL+Z EOF marker.

"R +", "w +" 또는 "a +" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용 됩니다. 즉, 파일이 "업데이트" 용으로 열립니다.When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for "update"). 그러나 읽기와 쓰기를 전환할 때는 먼저 fsetpos, fseek 또는 rewind 작업이 있어야 합니다.However, when you switch between reading and writing, there must be an intervening fsetpos, fseek, or rewind operation. 원하는 경우 fsetpos 또는 fseek 작업에 대해 현재 위치를 지정할 수 있습니다.The current position can be specified for the fsetpos or fseek operation, if desired. 위의 값 외에도 다음 문자 중 하나를 모드 문자열에 포함 하 여 새 줄에 대해 변환 모드를 지정할 수 있습니다.In addition to the above values, one of the following characters may be included in the mode string to specify the translation mode for new lines.

모드 한정자mode modifier 변환 모드Translation mode
t 텍스트(변환됨) 모드에서 엽니다.Open in text (translated) mode.
bb 이진 (변환 되지 않음) 모드에서 열기 캐리지 리턴 및 줄 바꿈 문자를 포함 하는 변환은 표시 되지 않습니다.Open in binary (untranslated) mode; translations involving carriage-return and line feed characters are suppressed.

텍스트 (변환 됨) 모드에서 캐리지 리턴-줄 바꿈 (CR-LF) 조합은 입력 시 LF (단일 줄 바꿈) 문자로 변환 됩니다. LF 문자는 출력에서 CR-LF 조합으로 변환 됩니다.In text (translated) mode, carriage return-line feed (CR-LF) combinations are translated into single line feed (LF) characters on input; LF characters are translated to CR-LF combinations on output. 또한 CTRL+Z는 입력 시 파일 끝 문자로 변환됩니다.Also, CTRL+Z is interpreted as an end-of-file character on input. "A +" 를 사용 하 여 읽거나 쓰고 쓰기 위해 열린 파일에서 런타임 라이브러리는 파일 끝에 CTRL + Z가 있는지 확인 하 고 가능한 경우이를 제거 합니다.In files opened for reading or for writing and reading with "a+", the run-time library checks for a CTRL+Z at the end of the file and removes it, if possible. 이는 fseekfseek 를 사용 하 여 파일 내에서 이동 하면 파일의 끝 부분에서 fseek 가 제대로 동작 하지 않을 수 있기 때문입니다.This is done because using fseek and ftell to move within a file may cause fseek to behave improperly near the end of the file. T 옵션은 ANSI 이식성이 필요한 곳에 사용 하면 안 되는 Microsoft 확장입니다.The t option is a Microsoft extension that should not be used where ANSI portability is desired.

모드에서 t 또는 b 를 지정 하지 않은 경우 기본 변환 모드는 _fmode전역 변수에 의해 정의 됩니다.If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. T 또는 b 가 인수 앞에 있으면 함수가 실패 하 고 NULL을 반환 합니다.If t or b is prefixed to the argument, the function fails and returns NULL.

텍스트 모드와 이진 모드에 대한 자세한 내용은 텍스트 및 이진 모드 파일 I/O를 참조하세요.For a discussion of text and binary modes, see Text and Binary Mode File I/O.

요구 사항Requirements

기능Function 필수 헤더Required header
freopenfreopen <stdio.h><stdio.h>
_wfreopen_wfreopen <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h>

이 콘솔은 UWP (유니버설 Windows 플랫폼) 앱에서 지원 되지 않습니다.The console is not supported in Universal Windows Platform (UWP) apps. 콘솔, stdin, stdoutstderr에 연결 된 표준 스트림 핸들은 C 런타임 함수가 UWP 앱에서 사용할 수 있으려면 먼저 리디렉션해야 합니다.The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. 호환성에 대한 자세한 내용은 Compatibility을 참조하세요.For additional compatibility information, see Compatibility.

예제Example

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

참조See also

스트림 I/OStream I/O
fclose, _fcloseallfclose, _fcloseall
_fdopen, _wfdopen_fdopen, _wfdopen
_fileno_fileno
fopen, _wfopenfopen, _wfopen
_open, _wopen_open, _wopen
_setmode_setmode