본문 바로가기
코스웨어/13년 스마트컨트롤러

5월 9일 정리 노트 - 이규남

by 알 수 없는 사용자 2013. 5. 20.
728x90
반응형

저수준 입출력 read와 write의 사용법을 알아보자.


fread와 read의 차이점


fread의 원형은 다음과 같다.  ----------> fread (void * ptr, size_t size, size_t count, FILE * stream );

                          1. void *ptr        = 파일 내용을 읽어드릴 메모리 포인터
                          2. size_t size    = 데이터 하나의 크기
                          3. size_t count  = 읽어들일 데이터의 갯수
                          4. FILE *stream = 읽어드릴 대상이 되는 파일 스트림

read의 원형은 다음과 같다. -----------> read (int fd, void *buf, int size);


  1. int fd            = 파일 디스크립트 ( 0번 : stdin 1번 : stdout 2번 : stderr) 즉 값을 숫자로 입력한다.

  2. void *buf      = 파일을 읽어들일 위치

  3. int size        = 읽어들일 크기


fwrite 와 write 역시 read와 동일하다.



리다이렉션


입력 또는 출력의 방향을 바꾸는 역활을 한다. 예를 들어

키보드 입력 ---------------> 버퍼에 임시 저장 -------------------> 파일로 저장


a라는 파일을 화면에 출력하는 대신 파일로 출력을 원한다면

a > a.out;


이런식의 모양새를 말한다. 보통을 키보드 입력을 받으면 화면에 출력을 하지만 방향을 바꾸어 파일로 출력을 할수도 있다.


클래스란??????????


어떠한 사용 용도를 목적으로 흔히 수학에서 말하는 집합이라는 개념으로 생각하면 된다.

C언어에서는 C++과 같이 객체지향적인 클래스의 개념은 아니므로 오해하지 말기를 바란다.


저장 클래스


저장 클래스의 경우에는 변수와 함수의 프로그램상의 지속시간과 유효범위를 명시해주는 것들을 일컬어 말한다.


auto : 보통은 생략해서 사용한다. 흔히 int a; 라고 선언을 하게되면 auto가 생략되어 있는것이다.!!

register : 컴파일러가 cpu 중의 남아있는 레지스터중 하나를 변수로 사용하게 된다. 그러나 여기서 주의해야할 사항은 사용자의 컴퓨터 

     레지스터의 크기에 따라서 사용하지 못하는 자료형도 생길수 있으니 조심해서 사용할 것.

     레지스터 변수를 사용하게 되면 가독성이 좋다.

static : 흔히 말하기를 전역변수라 얘기하고 정확히 말해서는 조금 틀린 의미를 부여하고 있다.

ex)

1번. static int a; 라고 선언을 하게되면 어느 함수에서도 호출이 가능하다.

2번. int add()

{

static int a; 이런 경우는 add함수가 호출후에도 a변수는 사라지지 않고 프로그램 종료시까지 유지한다.

}


3번. int main()

{

int a;

for(a=1; a<6; ++a)

{

static int b = 5;

b = a * b;

printf("%d ", b);

}

}

이경우 결과값은 어떻게 나올까????????????

신기하게도 static이라는 변수는 생성될때 초기화를 한번만 하기때문에 결과값은  5 10 30 120 600 이렇게 찍힌다. 

반면 static이 없다면 결과값은 5 10 15 20 25 순서로 b값은 5로 고정되어 버린다.


extern : 외부 참조를 할때 주로 사용한다. 보통의 경우 파일을 분할해서 소스를 코딩하게 된다. 그럴경우 변수이름이 중첩될수 있는데 

이와 같은 경우에는 변수명 앞에 extern을 붙이게 되면 다른 파일의 변수를 가치 사용할 수 있게 된다.



--------------------------------------------------------- 절 취 선 (여기서부터는 ARM)----------------------------------------------------





0 = 마지막까지 읽고나서 더이상 수신이 없는 상태(비활성화)

1 = 아직 다 수신받지 않은상태 (즉, 지금 수신중인 상태를 얘기)




여기서 return값이 8bit 이므로 자동으로 쓰레기 값이 잘려나간다. 따라서 따로 설정해줄 필요가 없다.






728x90