freopen_s, _wfreopen_s
파일 포인터를 다시 할당합니다. 이러한 fopen,_wfopen 의 버전은 CRT의 보안 기능에 설명된 대로 보안 향상 기능이 포함됩니다.
errno_t freopen(
FILE** pFile,
const char *path,
const char *mode,
FILE *stream
);
errno_t _wfreopen(
FILE** pFile,
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
매개 변수
[out] pFile
호출에서 제공하는 파일 포인터에 대한 포인터입니다.[in] path
새 파일의 경로입니다.[in] mode
허용 되는 액세스 유형[in] stream
FILE 구조체에 대한 포인터입니다.
반환 값
이러한 함수의 각각은 오류 코드를 반환합니다. 오류가 발생하면 원본 파일이 닫힙니다.
설명
freopen_s 함수는 현재 stream 과 연결된 파일을 닫고 stream 을 path. 에 의해 지정된 파일로 재할당합니다._wfreopen_s은 _freopen_s 의 와이드 문자 버전입니다.; _wfreopen_s 의 path 및 mode 인수는 와이드 문자 문자열입니다. 그렇지 않으면 _wfreopen_s 및 _freopen_s 는 동일하게 작동합니다.
pFile, path, mode, 또는 stream 중 하나라도 NULL 이거나 path 가 빈 문자열이라면 이러한 함수는 매개 변수 유효성 검사 에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우, 이러한 함수는 errno 를 EINVAL 로 설정하고 EINVAL을 반환합니다.
제네릭 텍스트 라우팅 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
_MBCS 정의됨 |
_UNICODE 정의됨 |
---|---|---|---|
_tfreopen_s |
freopen_s |
freopen_s |
_wfreopen_s |
freopen_s 는 일반적으로 미리 열어본 파일 stdin, stdout, 와 stderr 을 사용자가 지정한 파일에 재전송하기위해 사용됩니다. 이 stream 와 관련된 새 파일은 mode*,* 를 사용하여 열리며 다음과 같이 파일에 대해 요청된 액세스의 형식을 지정하는 문자열입니다.
"r"
읽기 위해 엽니다. 파일이 없거나 찾을 수 없는 경우 freopen_s 호출이 실패합니다."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+" 액세스 형식이 지정된 경우 읽기와 쓰기가 모두 허용됩니다.(파일이 "update"용으로 열립니다) 그러나 읽기 및 쓰기를 전환할 때 반드시 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_s |
<stdio.h> |
_wfreopen_s |
<stdio.h> 또는 <wchar.h> |
콘솔은 Windows 스토어 응용 프로그램에서 지원되지 않습니다. 콘솔에 연결된 표준 스트림 핸들 stdin, stdout 및 stderr은 Windows 스토어 응용 프로그램의 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" );
}