fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.
getc() is equivalent to fgetc() except that it may be implemented as a macro which evaluates stream more than once.
getchar() is equivalent to getc(stdin).
즉, 문자열 여러개를 입력하면 커널이 알아서 해당 스트림에 데이터를 차곡 차곡 쌓아 놓는 것이고,
getchar()는 단지 표준 스트림에서 '빼오기만'하는 행동만 하는 겁니다.
getchar()가 굳이 키보드로 입력받을 필요 없습니다.
어떠한 입력장치라도 표준 스트림에 연결되면,
해당 입력장치로부터 getchar()를 이용해 데이터를 수신할 수 있습니다.
========================================================
자세히 적으려다가 너무 길어졌네요. 요약하면
"알맞은 입력이 들어오면 운영체제(커널)가 알아서 스트림에 데이터를 넣어준다."
"getchar()은 해당 스트림중에서 표준스트림으로부터 데이터를 1바이트 만큼 빼오는 함수이다."
우선 입출력과 운영체제쪽부터 설명해야 말이
우선 입출력과 운영체제쪽부터 설명해야 말이 되는데
[입력]-[커널]-[프로세스의 스트림]-[유저 프로세스]
대략 이런 식으로 유저 프로세스에게 정보가 오고 갑니다.
그런데 프로세스 스트림중에 표준 입력 스트림이라는게 존재하는데(stdin)
getchar는 이 스트림으로부터 데이터를 '읽어'오는 함수입니다.
즉, 문자열 여러개를 입력하면 커널이 알아서 해당 스트림에 데이터를 차곡 차곡 쌓아 놓는 것이고,
getchar()는 단지 표준 스트림에서 '빼오기만'하는 행동만 하는 겁니다.
getchar()가 굳이 키보드로 입력받을 필요 없습니다.
어떠한 입력장치라도 표준 스트림에 연결되면,
해당 입력장치로부터 getchar()를 이용해 데이터를 수신할 수 있습니다.
========================================================
자세히 적으려다가 너무 길어졌네요. 요약하면
"알맞은 입력이 들어오면 운영체제(커널)가 알아서 스트림에 데이터를 넣어준다."
"getchar()은 해당 스트림중에서 표준스트림으로부터 데이터를 1바이트 만큼 빼오는 함수이다."
아...질문을 잘 못 이해한것 같네요/ char
아...질문을 잘 못 이해한것 같네요/
이런식으로 구현되있나 보죠?
그냥 여러번 읽고 여러번 쓴다는 것 같네요. 쓴거 아까워서 안지우고 따로 답니다;;
stdin 버퍼 비울때 자주 쓰는 방식인데, 읽어도
stdin 버퍼 비울때 자주 쓰는 방식인데, 읽어도 됩니다.
근데 책이 설명을 좀 이상하게 해놨네요.
댓글 달기