프로그래밍 기술/리눅스(Unix) 시스템 프로그래밍

표준 입출력 - freopen, fdopen

언제나휴일 2017. 7. 28. 12:41
반응형

 표준 입출력 라이브러리에서는 fopen 외에도 freopen, fdopen 함수를 통해 파일 스트림을 열 수 있어요. 이 두 함수는 이미 열려진 파일을 재지정할 때 사용합니다.

 

 freopen은 열려진 파일 스트림을 입력 인자로 전달하고 fdopen은 파일 디스크립터를 전달합니다.

#include <stdio.h >

FILE *freopen(const char *pathname, const char *mode, FILE *fp);

FILE *fdopen(int fd, const char *mode);

반환 값실패 시 NULL


 다음은 main 함수 인자로 파일 명을 전달하면 표준 출력을 해당 파일명으로 재지정합니다. 이 후 printf 함수를 호출하면 콘솔 화면에 출력하지 않고 재지정한 파일에 출력하는 것을 확인할 수 있습니다.

 

/**********************************************************************

* ex_freopen.c                                                                  *

* exmple source test freopen                                            *

**********************************************************************/

 

#include <stdio.h>

 

int main(int argc, char **argv)

{

             if (argc != 2)

             {

                           fprintf(stderr, "Usage:%s <file name> \n", argv[0]);

                           return 1;

             }

 

             FILE *fp = freopen(argv[1], "w", stdout);

             if (fp)

             {

                           printf("Hello Linux System Programming.\n");

                           fclose(fp);

             }

             else

             {

                           printf("failed\n");

             }

 

             return 0;

}

 


[그림 5.8] ex_freoepn 실행 화면

[그림 5.8] ex_freoepn 실행 화면

 

 다음은 fdopen 함수를 이용하여 표준 출력을 파일 스트림으로 재지정합니다. 이 후에 fprintf 함수를 호출하여 쓰기 작업을 수행하면 표준 출력으로 쓰기 작업을 수행하는 것과 같은 효과가 있는 것을 볼 수 있어요.

/**********************************************************************

* ex_fdopen.c                                                                   *

* exmple source test fdopen                                             *

**********************************************************************/

 

#include <stdio.h>

 

int main()

{

             FILE *fp = fdopen(1, "w");

             if (fp)

             {

                           fprintf(fp, "Hello Linux System Programming.\n");

                           fclose(fp);

             }

             else

             {

                           printf("failed\n");

             }

 

             return 0;

}

 

 

[그림 5.9] ex_fdoepn 실행 화면

[그림 5.9] ex_fdoepn 실행 화면


반응형