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 포인터 값을 반환합니다. 이 path, mode, 혹은 stream 은 null 포인터이거나 filename 이 빈 문자열일 경우, 이러한 함수는 매개 변수 유효성 검사로 설명된대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우, 이러한 함수는 errno 를 EINVAL 로 설정하고 NULL을 반환합니다.
이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr을 참조하십시오.
설명
더 안전한 버전의이 함수존재를 보려면, freopen_s, _wfreopen_s를 참조하세요.
이 freopen 함수는 현재 stream 과 연결된 파일을 닫고 stream 을 path*.* 에 의해 지정된 파일로 재할당합니다. _wfreopen 은 _freopen의 와이드 문자 버전입니다.; _wfreopen 의 path 및 mode 인수는 와이드 문자 문자열입니다. _wfreopen 및 _freopen 는 동일하게 작동합니다.
제네릭 텍스트 라우팅 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
_MBCS 정의됨 |
_UNICODE 정의됨 |
---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopen 는 일반적으로 미리 열어본 파일 stdin, stdout, 와 stderr 을 사용자가 지정한 파일에 재전송하기위해 사용됩니다. 이 stream 와 관련된 새 파일은 mode*,* 를 사용하여 열리며 다음과 같이 파일에 대해 요청된 액세스의 형식을 지정하는 문자열입니다.
"r"
읽기 위해 엽니다. 파일이 없거나 찾을 수 없는 경우 freopen 호출이 실패합니다."w"
쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다."a"
새로운 데이터를 파일에 쓰기 전에 EOF 마커를 제거하지 않고 파일의 끝에 쓰기(추가) 위해 엽니다. 존재하지 않는 경우 파일을 먼저 만듭니다."r+"
읽고 쓰기 위해 엽니다. (파일이 존재 해야 합니다.)"w+"
읽고 쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다."a+"
읽고 추가하기 위해 엽니다; 추가 작업은 새로운 데이터가 파일에 쓰여지기 전에 EOF 마커의 제거도 포함하며 EOF 마커는 쓰기가 완료된 후 재저장 됩니다; 파일이 존재하지 않는 경우 파일을 먼저 만듭니다.
이 "w" 와 "w+" 형식은 기존 파일을 삭제할 수도 있으므로 신중하게 사용합니다.
이 "a" 또는 "a+" 액세스 형식을 사용하여 파일을 연 경우 모든 쓰기 작업은 파일의 끝에서 수행됩니다. 이 fseek 또는 rewind를 사용하여 파일 포인터의 위치를 변경할 수 있지만, 파일 포인터는 쓰기 작업을 수행하기 전에 항상 파일 끝으로 다시 이동합니다. 따라서 기존 데이터를 덮어쓸 수 없습니다.
이 "a" 모드는 파일에 추가 하기 전에 EOF 마커를 제거하지 않습니다. 추가 작업이 수행된 이후에는 MS-DOS TYPE 명령은 원래 EOF 표식까지만 데이터를 표시하고 파일에 추가된 데이터는 표시하지 않습니다. 이 "a+" 모드는 파일에 추가 하기 전에 EOF 마커를 제거합니다. 추가 후에는 MS-DOS TYPE 명령으로 파일의 모든 데이터를 표시합니다. "a+" 모드에서는 Ctrl+Z EOF 표식으로 종료되는 스트림 파일에 추가해야 합니다.
"r+", "w+" 또는 "a+" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용됩니다. 즉, 파일이 "업데이트"용으로 열립니다. 그러나 읽기 및 쓰기를 전환할 때 반드시 fsetpos, fseek, 또는 rewind 작업 사이에 있어야 합니다. 원하는 경우, fsetpos 또는 fseek 작업에 대해 현재 위지를 지정할 수 있습니다. 위의 값 이외에도 아래의 문자중 하나가 새 줄에 대한 변환 모드를 지정하기 위해 mode 문자열에 포함 될 수 있습니다.
t
(변환된)텍스트 모드 에서 엽니다; 캐리지 return-linefeed (CR-LF) 조합은 입력에서 단일 linefeed (LF) 문자로 변환됩니다; LF 문자는 출력에서 CR-LF 조합으로 변환됩니다. 또한, CTRL + Z는 입력에서 파일 끝 문자로 해석 됩니다. 읽기 위해 열리거나 "a+" 를 사용하여 읽거나 쓰기 위해 열린 파일에서 런타임 라이브러리는 파일의 끝에서 CTRL+Z 를 확인하고 가능하다면 제거합니다. 이 fseek 및 ftell 을 사용하여 파일 내에서 이동하면 파일의 끝 부분에서 fseek 가 제대로 동작하지 않을 수 있으므로 이 작업을 수행합니다. 이 t 옵션은 Microsoft 확장이므로 ANSI 이식성이 필요한 경우 사용할 수 없습니다.b
(변환 되지 않은) 이진 모드에서 엽니다; 위의 변환은 표시되지 않습니다.
t 또는 b가 mode에 지정되지 않은 경우, 기본 변환 모드는 전역 변수 _fmode로 정의됩니다. t 또는 b가 인수에 접두어로 추가되면 이 함수는 실행되지 못하고 NULL을 반환합니다.
텍스트 및 이진 모드의 논의는 텍스트 및 이진 모드 파일 I/O 를 참조하십시오.
요구 사항
Function |
필수 헤더 |
---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> 또는 <wchar.h> |
콘솔은 Windows 스토어 응용 프로그램에서 지원되지 않습니다. 콘솔에 연결된 표준 스트림 핸들 stdin, stdout 및 stderr은 Windows 스토어 응용 프로그램의 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" );
}