본문 바로가기
42seoul/circle-1

[ ft_printf ] 3. printf의 버퍼 관리 방법 (표준 입출력과 버퍼 | 스트림과 데이터 이동)

by saniii 2022. 1. 15.

 

#  입력과 출력

+ 입력 : 프로그램 안으로 데이터가 들어오는 것

    ex) 키보드, 파일, 마우스 ...

+ 출력 : 프로그램 밖으로 데이터가 나가는 것

    ex) 모니터, 파일, 프린터  ...

 

 

# 스트림 

+ 스트림(stream) : 한 방향으로 흐르는 데이터의 흐름

     - 한 방향으로만 데이터의 전송이 이뤄진다. 

     - 프로그램에서 데이터를 입출력하기 위해 입력장치, 출력장치를 프로그램과 연결시켜 주는 다리 역할을 하는 매개체

          - 운영체제에서 제공하는 소프트웨어로 구현된 가상의 다리

          - 외부장치와 프로그램 사이의 데이터 송수신 도구

 

입-출력 스트림에 따른 데이터의 흐름

 

+ 스트림의 생성과 소멸 

키보드와 모니터등등의(콘솔) 연결을 위한 스트림의 생성은 자동으로 생성된다. 

즉, 콘솔 입출력을 위한 입-출력 스트림은 프로그램 실행시 자동으로 생성되고, 종료시 자동으로 소멸된다. 

 >> 기본적으로 제공되는 표준 스트림 (stdin 표준입력스트림, stdout 표준출력스트림, stderr 표준에러스트림)

 

 

# 표준 입출력

+ 표준 입출력 함수

 >> printf(), scanf(), getchar(), putchar(), fgets(), fputs, ....

   - 표준 입출력 함수를 통해서 데이터를 입출력하는 경우, 이 데이터들은 운영체제가 제공하는 메모리 버퍼를 거친다. 

+ 메모리 버퍼 : 데이터를 임시로 '모아두는(저장하는)' 메모리 공간

+ 버퍼링(Buffering) : 버퍼에 데이터를 저장

   - 버퍼링의 이유, 장점 ? 

외부 장치와의 데이터 입출력은 시간이 오래걸려 효율성이 떨어진다. 따라서 데이터가 들어올 때마다 전송하기보다 데이터를 어느 정도 모아서 한번에 전송하는 것이 빠르고 효율적이다. 따라서 버퍼링을 통해 데이터를 전달한다. 

 

 

 


2021.12.23 - [42_san (42seoul)/ft_printf] - [ printf ] 0. 문제 이해하기

 

[ printf ] 0. 문제 이해하기

- libc의 printf 직접 구현하기 - 성공적인 ft_printf는 체계적이고 확장성있는 코드입니다. - 사용 가능한 외부 함수 malloc : void *malloc(size_t size); : size 바이트의 메모리를 힙에서 할당하여 반환 free..

rrddo.tistory.com

그렇다면 문제의 제시 [ 실제 printf처럼 버퍼 관리를 수행해서는 안된다.] 를 수행하려면 어떻게 로직을 짜야할까?

 

 

 

 

 

 

 

 

 

 

 

 

 

[참고]

윤성우의 열혈 C프로그래밍 - 윤성우 저

댓글