C언어/stdio.h

[C언어] freopen 함수 (stdio.h)

아무일도없었다 2022. 8. 26. 19:50

사용범위

Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수

기능

C언어 표준 함수로 이미 열고있는 FILE 을 다른 FILE 로 변경하거나 접근방식(mode) 를 변경한다.

헤더

#include <stdio.h>

※ freopen 함수 사용시 stdio.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※


함수

FILE* freopen(const char* filename, const char* mode, FILE* file);

파라미터

  • const char* filename
    • 새로 open 할 파일의 이름과 경로를 입력한다.
    • 파일의 이름만 입력시 상대경로로 접근한다.
  • const char* mode
    • 첫번째 파라미터인 filename 에 접근할 방식을 입력한다.
    • mode 와 관련된 정보는 fopen 함수를 참고한다.
  • FILE* file
    • fopen 함수를 통해 열린 file stream을 입력한다.

 


반환값

성공시   변경에 성공한 file stream 를 반환한다.
실패시   NULL을 반환한다. (세번째 파라미터인 file stream 을 API 내부에서 닫는다.)

 


잡학지식

몇몇의 알고리즘 사이트는 input 에 대한 output 을 file 로 지정해서 테스트를 진행한다.

그럴때 본인이 사용중인 IDE 에서 printf 같은 콘솔출력으로 테스트를 진행한 후에
freopen 함수를 사용해서 stdout 을 file stream 으로 변경해주기만 하면 코드수정 없이(?) 진행할 수 있다.

 


 

<소스 코드>

#include <stdio.h>

int main() {
    FILE *fp;

    printf("Hello, freopen (stdout)\n");

    // stdout -> file stream
    fp = freopen("test.txt", "w", stdout);
    if(fp != NULL) {
        printf("[freopen] Change STDOUT -> test.txt stream !");

        fclose(fp);
    } else {
        // freopen 실패 !
    }
    return 0;
}

 

※ 실행 결과

Hello, freopen (stdout)

 

< test.txt >

[freopen] Change STDOUT -> test.txt stream !

 

반응형