HCI(Human Computer Interface) :
→ CLI(Command Line Interface) - DOS, Linux
→ GUI(Graphic User Interface)
→ UX
getchar()
---- 문자 한 글자
|
|
가져오라!(어디서? 어떻게?)
컴퓨터
남의 집을 털어오는 행위 : Debugger(Privileged Level Software)
집 집 집 Process 함수 : getchar(), putchar()
개인. 개인. 개인 (Thread) . User (인간) ↓x | kernel과 연결 ㅁ(인터페이스): File - Write/Read 정보(규칙 : 프로토콜)
-------------------------------------------------------------------------------|----------
(신) |
'정부' (구성요소...) Kernel(OS) → → → → → → → I/O 입/출력
Driver ↓
------------------------------------------------------------------------------------------
영토 , 영해, 영공 H/W 장치
입출력을 요구 : put char() / get char() , 실제 입출력 행위는 Kernel에서 하겠지
User File == Socket
Kernel TCP
Driver
H/W NIC
Socket I/O = 시스템 프로그래밍 + File I/O + Protocol + TCP
putchar('A'); - Buffer로부터 퍼올린다 - Buffered I/O
getchar('A'); - Buffer로부터 퍼올린다 - Buffered I/O
+ {W: 'A' } Buffer
User ---- File ---- {R: }
Buffer : Memory
↓
완충기 Ex) Youtube 동영상 Streaming Service
PC -----------Req----------> Youtube
<------------------------
PC에서 유튜브로 동영상 요청
{------| }
Play Network x → 충격
1) 버퍼가 어느정도까지 채워지면 1. Play 자료를 더 다운받는다 2. Network
2) Network가 살짝 끊기면 잠깐 멈춘다 : 충격
3) 자료가 더 이상 송수신 되지 않는다 그러나 재생은 정보를 소비하는 속도 일정
4) 재생하는 사이에 다시 네트워크에 연결되면 다시 계속 재생
네트워크 끊기는 충격이 벌어졌는데 소비자는 충격이 일어났단 사실을 모른다. So Buffering!!!!!
Buffered I/O
getchar() - 한글자를 꺼내온다
scanf() - 형식문자에 맞게 꺼내온다(ex. %d) : 나이 → → → → → scanf_s() 써야함
gets() - 한줄을 꺼내온다 : 문자열, 이름 ---------- 매우 심각한 보안 결함!!!!!!!!! → → → → → gets_s() 써야함
Non Buffered I/O - _getch() : <conio.h>
fflush() → → buffer를 비우는 함수
Ex) Hello ---- {Hello}_Buffer
Buffer
하나의 장치에서 다른 장치로 데이터를 전송할 경우에 양자간의 데이터의 전송속도나 처리속도의 차를 보상하여 양호하게 결합할 목적으로 사용하는 기억영역을 버퍼 또는 버퍼 에어리어라고 한다. 보통 중앙처리장치와 단말이나 다른 입출력장치사이의 데이터 송수신에는 입출력 영역으로서 버퍼를 필요로 한다. 또, 중앙처리장치와 주기억장치의 사이에 고속으로 동작하는 소용량의 버퍼 메모리(로컬 메모리라고도 한다)를 설치하여 처리의 고속화를 꾀하는 방식도 있다.
실습 - 메모리 창(두 번째 강의 시작점, 17분)
#include <stdio.h>
int main()
{
char szName[12] = {"Hello"}; ㅁㅁㅁㅁㅁ
gets_s(szName, sizeof(szName));
return 0;
}
Win7 → ASLR(Adrress Space Layout Randomization) - 레이아웃으로 주소가 랜덤으로 바뀜 : 메모리의 위치를 알면 해킹할 수 있기 때문에
Buffer
#include <stdio.h>
int main(void)
{
FILE *fp = stdin;
getchar();
getchar();
getchar();
getchar();
return 0;
} - 현재 Buffer가 없기 때문에 새로 입력 Hello 입력시 0a(내가 친 Enter) 0a(getchar가 자동 입력)
_cnt = 5 다섯글자 읽을 것 남음
File *fp = stdin;
int nData = 0;
scanf_s("%d", &nData - 이름이 nData인 변수의 주소: Buffer에서 읽어서 담으라);
return 0;
int main(void)
{
int nAge = 0;
printf("나이를 입력하세여 : ");
scanf_s("%d%*c- 읽고 저장을 안하고 제거", &nAge);
//fflush(stdin);
//getchar();
char szName[12] = { 0 };
printf("이름을 입력하세요:")
gets_s(szName. sizeof(szName));
printf("%d, %s\n", nAge, szName);
return 0 ;
}
--- 이대로면
gets() ---- 키보드 주소로 문자 하나하나 순서대로 입력
{ } 어느 문자열이 저장
puts("Hello"); - 주소로 찾아서 문자 하나하나 순서대로 출력
[Hello] - Console에다가 문자열 보여줌(모니터)
문자배열 Hello - 문자열 상수
= char[5+1] Read only(write x)
배열
stdin → File I/O Buffer(Window 4kb → 4096)
Buffer 크기 → 100, 200, 300 ㅁ변화
'Language&Framework&Etc > C' 카테고리의 다른 글
6일차 - 기본제어문 (0) | 2017.05.29 |
---|---|
5일차 (0) | 2017.05.20 |
4일차 (0) | 2017.05.20 |
2일차 (0) | 2017.05.14 |
1일차 (0) | 2017.05.09 |