c 언어 스트림과 데이터의 이동

스트림과 데이터의 이동

컴퓨터 프로그래밍에서 입력이란 프로그램을 기준으로 프로그램 안으로 데이터가 흘러들어가는 것이고 출력이란 프로그램을 기준으로 데이터가 나오는 것이다.

우리는 흔히 컴퓨터 프로그램에 입력을 입력하고 문자열이 출력되는 것을 보면서 어떻게 컴퓨터가 모니터에 저런 문자열을 출력할 수 있는지 궁금해 한다.

우리가 입력하는 문자열이 어떻게 모니터에 출력되는 것일까?

우리가 작성하는 프로그램과 모니터는 기본적으로 연결되어 있는 것이 아닌 떨어져 있는 개체이며 둘 사이에 무언가 정보를 주고 받기 위해서는 이들을 연결시켜주는 다리가 필요하다. 이러한 매개물이 바로 스트림 이다.

c 언어 내의 printf 혹은 scarf 와 같은 함수는 운영체제에게 스트림의 형성을 요구하는 것이며 이는 표준 입출력 라이브러리인 stdin, stdout 을 통해 이루어 진다.

단일 문자의 입출력

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main(void)
{
int ch1, ch2;

ch1 = getchar(); // 표준 입력 스트림으로부터 하나의 문자를 입력 받아서 반환
ch2 = fgetc(stdin); // 문자를 입력받을 스트림을 지정

putchar(ch1); // 인자로 전달된 문자정보를 stdout으로 표현되는 표준 출력 스트림으로 전송하는 함수
fputc(ch2, stdout); // 문자를 전송할 스트림을 지정할 수 있다. 가령 파일을 대상으로 데이터를 전송한다.

return 0;
}

문자열의 입출력

문자열의 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
char *str = "Simple String";

printf("1, puts test -------- \n ");
puts(str);
puts("So Simple String");

printf("2. fputs test ------ \n");
fputs(str, stdout); // 두번째 인자에서 출력의 대상 선택
printf("\n");
fputs("So Simple String", stdout);
printf("\n");

printf("3. end of main --- \n");
return 0;
}

문자열의 입력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main(void)
{
char str[7];
int i;

for (i = 0; i < 3; i++)
{
fgets(str, sizeof(str), stdin); // str의 사이즈 만큼 문자열을 입력받는다.
printf("Read %d: %s \n", i + 1, str);
}

return 0;
}

표준 입출력과 버퍼

위처럼 표준 입출력 함수를 통해 데이터를 입출력 하는 경우 해당 데이터들은 운영체제가 제공하는 메모리 버퍼 를 중간에 통과하게 된다. 이 메모리 버퍼는 데이터를 임시로 모아두는 메모리 공간이다.

컴퓨터는 왜 이러한 입출력 스트림을 바로 저장하지 않고 입 출력 버퍼에 보관후에 저장하는 것일까?

이는 바로 데이터의 효율성 때문이다.

모니터와 키보드라는 외부 자원을 활용하는 것은 컴퓨터에게는 상당히 무거운 태스크 이며 이를 최소한으로 수행하기 위해 주고 받는 데이터를 모은 다음 한번에 처리하는 것이다.

1. mysql 시작하기

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×