happy coding

[c] 콘솔 입출력 본문

self study/언어의 기본부터

[c] 콘솔 입출력

yeoonii 2022. 11. 27. 01:03

버퍼(buffer)

표준 입출력 함수를 사용할 때에는 버퍼라는 임시 메모리 공간을 사용하게 된다.

버퍼를 사용하면서 얻을 수 있는 장점은 1. 문자를 하나씩 전달하는 것이 아닌 묶어서 한 번에 전달하므로, 전송 시간이 적게 걸려 성능이 향상된다. 2. 사용자가 문자를 잘못 입력했을 경우 수정할 수 있다. 이다.

하지만 입력 작업에 버퍼를 사용하는 데에 단점 또한 존재하는데, 빠른 반응이 요구되는 게임과 같은 프로그램에서는 키를 누르는 즉시 바로 전달되어야만 한다.

버퍼링 방식

입출력에 사용되는 버퍼링에는 1. 완전 버퍼링(fully buffered) 2. 라인 버퍼링(line-buffered) 이 존재한다.

완전 버퍼링은 버퍼가 가득 차면 버퍼 안의 내용을 목적지로 보내는 방식이며 보통 파일 입출력에서 사용된다. 라인 버퍼링은 입력된 문자 중 개행 문자가 나타날 때마다 버퍼 안의 내용을 목적지로 보내는 방식이며 보통 키보드 입력에서 사용된다.

fflush() 함수

이 함수는 인수로 전달된 스트림에 연결된 버퍼를 비워준다.

#include <stdio.h>
int fflush(FILE *stream);	//함수 원형

인수로 전달되는 스트림이 입력 스트림과는 관련이 없으며, 출력 스트림과 관련 있다. 출력 스트림이 인수로 전달되면 출력 버퍼 안에 있는 데이터를 즉시 목적지로 보내준다. 만약 널 포인터가 인수로 전달되면, 해당 프로그램에서 앞서 정의한 모든 스트림에 대한 버퍼를 전부 비워준다. fflush() 함수는 버퍼를 성공적으로 비우면 0을 반환하고, 버퍼를 비우는데 실패하면 EOF를 반환한다. 입출력함수는 입력 버퍼에 데이터가 남아 있으면, 키보드로부터 데이터를 입력받지 않고 버퍼에 남아있는 데이터를 먼저 사용한다. 

fflushI() 함수는 출력스트림만 관련 있기 때문에, fflush() 함수를 이용해 입력 버퍼를 비우기보다는 getchar() 함수를 이용해 입력버퍼를 지워야 한다.

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 파일 입출력 함수  (0) 2022.11.27
[c] 파일 입출력  (0) 2022.11.27
[c] 공용체와 열거체  (0) 2022.11.27
[c] 구조체의 활용  (0) 2022.11.27
[c] 포인터와 구조체  (0) 2022.11.26
Comments