Standard IO는 무엇인가?

먼저 커맨드가 실행되면 3가지 파일에 접근하게 된다.

  • 먼저 standard input file에 접근하게 된다. 보통 이것은 키보드이다.
  • 그리고 나서 standard output file에 작성한다. 보통 이것은 스크린이다.
  • 만일 이때 에러가 발생했다면 해당하는 에러 메세지를 standard error file에 적게 된다.
  • shell에서는 이 세개의 파일을 각각 stdin, stdout, stderr 라고 이름 짓고 있다.
  • shell은 각각에게 file descriptors를 제공하는데 각각 0(stdin), 1(stdout), 2(stderr)을 준다.

Stdin and Stdout Example

아래 코드와 같이 코드와 같이 유저로 부터 text를 받아서 소문자로 바꿔주는 함수를 생각해보자.

#include <stdio.h>

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

다음 코드를 실행시키면 다음과 같이 모든 글자를 소문자로 변경시켜준다.

jeongjinhyeog-ui-MacBook-Pro:instaGrap jeongjinhyeog$ ./lower
This Is Mixed Input
this is mixed input

그럼 이때 다음과 같은 대문자만 있는 파일을 인풋으로 넣어보자.

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 < uppercase.txt 
this text is written in uppercase.
there isn't any lower case letter in the entire file.

다음과 모든 내용이 소문자로 변하게 된다.

  • 이때 전달된 uppercase.txt를 Standard Input 이라고 한다.
  • 여기서 스크린에 작성된 내용을 Standard Output 이라고 한다.

이번에는 Standard Output을 파일에 저장해보자.

jeongjinhyeog-ui-MacBook-Pro:instaGrap jeongjinhyeog$ ./lower < uppercase.txt > lowercase.txt
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.

따란.. 다음과 같이 Standard Input과 Output을 통해 소통해보았다.

그렇다면 C 내에서 파일을 열고 쓰는 과정을 한번 진행해보자.