C에서 입출력 처리하기

앞선 포스트에서 Linux 명령어를 이용해서 stdin과 stdout을 처리하는 방법에 대해서 이야기 해봤다.

그렇다면 C 코드 내부에서 input file을 받고 저장할 수 있는 방법은 없을까?

freopen() 함수 이용하기

이 함수를 이용하면 C 내부에서 input과 output을 처리 할 수 있다.

FILE *freopen(const char *path, const char *mode, FILE *fp);
  • path : 열려있는 스트림을 닫고 path를 연다.
  • mode : 어떤 목적으로 파일을 여는지 mode를 결정한다.
  • fp : 파일의 type을 정의한다.

예제 코드

인풋 내용 중에 대문자가 있으면 다 소문자로 바꿔주는 프로그램이다.

#include <stdio.h>

main(){
  freopen("uppercase.txt", "r", stdin);
  freopen("lowercase.txt", "w", stdout);

  int c;
  while(( c=getchar() ) != EOF) putchar(tolower(c));
  return 0;
}

실행한 후에 아래와 같이 lowercase.txt 파일이 생성되었고 그 안에는 해당 내용이 들어가 있는 것을 볼 수 있다.

jeongjinhyeog-ui-MacBook-Pro:instaGrap jeongjinhyeog$ cat uppercase.txt 
THIS TEXT IS WRITTEN IN UPPERCASE.
THERE ISN'T ANY LOWER CASE LETTER IN THE ENTIRE FILE.
jeongjinhyeog-ui-MacBook-Pro:instaGrap jeongjinhyeog$ ./lower
jeongjinhyeog-ui-MacBook-Pro:instaGrap jeongjinhyeog$ cat lowercase.txt 
this text is written in uppercase.
there isn't any lower case letter in the entire file.