표준 입출력 라이브러리에서는 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; }
다음은 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; }