본문 바로가기
Language&Framework&Etc/C

3일차

by 머리올리자 2017. 5. 18.

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