본문 바로가기
코스웨어/12년 내장형하드웨어

09.20 배운것

by 알 수 없는 사용자 2012. 9. 20.
728x90
반응형

※ C문법에서 빼먹은 것

  i = 100;
  if(0 && i++);
  란 식을 보면 if문의 결과는 거짓이다.
  하지만 if문의 조건은 수행되었기 때문에 i 값은 1이 증가한 101일것 같지만,
  실상은 그렇지 않은 100의 결과값을 가진다.

  왜냐하면 컴파일러가 알아서 최적화(왜곡)를 시키기 때문이다.
  그래서 0의 결과만 봐도 거짓임을 판단이 가능하기 때문에 i++를 실행하지 않는다.

  if(1||i++);
  란 식도 마찬가지다. 1의 결과만 보더라도 if문의 결과가 참인것을 알기 때문에,
  뒤에 i++를 실행시키지 않는다.
  결국 컴파일러의 최적화는 또 다른 왜곡이다.

1. 비차단 읽기(Non-Brocking)
  
  read()는 블로킹함수다.
  하지만 open() 함수를 호출하면서 O_NONBROCK으로 설정하면,
  비차단 읽기가 가능해 진다.

2. read()에서 크기 제약

  size_t = unsigned int 로,
  ssize_t = signed int 로 typedef 되어있다.


read()함수


10. 다중입출력
  
  int A;
  int B;
  A=open("장치1",...);
  B=open("장치2",...);
  while(1)
  {
    read(A,buf,10);
    read(0,buf,100);
  }
지금 받을 장치 3가지(stdin,장치1,장치2) 중에 먼저 입력이 오는 것을 읽고 싶지만,
C는 순차적이라 A에서 읽지 못하면, 키보드 입력또한 받지 못한다.
하지만 select() 함수를 쓰면 먼저 들어오는 입력을 골라서 받을 수 있다.

728x90