본문 바로가기

Programming/Linux_Kernel

select 함수에 대한 친절한 설명


http://blog.naver.com/ehdus85?Redirect=Log&logNo=130098898750



  • 파일 디스크립터를 리턴 받았다는 것은 입/출력 버퍼가 생겼다는 의미
  • 파일 디스크립터의 변화는 입/출력 버퍼의 변화가 있는 것
  • 입/출력 버퍼의 변화 : 입/출력 버퍼의 여유가 있는가?
  • select 함수는 파일 디스크립터의 변화가 없으면 리턴하지 않는다 : 대기상태(블로킹)에 빠질수 있다.
  • 타임 아웃 설정 : 대기 상태에 빠지지 않도록 원하는 시간이 되면 알아서 리턴하도록 설정
  • 검사 범위 설정 : select 함수가 보다 쉽게 검사하도록
  • 디스크립터 설정

       

  • 자료형 변수 : 비트단위 구분을 통해서 구분

       

  • readset : 변수 선언
  • FD_ZERO : 전달받은 변수에 대한 인자를 0으로 초기화
  • FD_SET : 실제로 묶어주고 싶은 파일디스크립터, 변수의 포인터
  • FD_CLR : 지우고자 하는 파일디스크립터의 값, 변수의 포인터
  • FD_ISSET : 현재 설정되어 있느냐? 파일 디스크립터가 설정되어있으면 1, 아니면 0 반환

       

  • 검사 범위 설정, 타임 아웃의 설정

       

  • 1을 더하는 이유는 파일 디스크립터 값이 0부터 시작하므로
  • tv_usec : 마이크로 sec 단위 설정 (더 세부적인 sec 설정할 때 필요)

       

  • 인자 : 파일 디스크립터 총 3묶음, 검사해야할 범위, 타입아웃
  • 1번째 인자 : 검사할 파일 디스크립터 개수(검사범위)

       

  • 결과 확인

       

  • 1에서 0으로 바뀌면 변화 없다.
  • 1에서 1로 그대로면 변화 발생했다.

       

  • temps=reads : reads 의 변화없는 부분은 0으로 바뀜, reads 는 변화가 생기기 때문에 원본 유지를 위해서 필요
  • 타임아웃을 반복문 밖에 넣게 되면 : 타임 아웃 리턴되고 나면 남은 시간을 다시 저장시킨다

       

    [출처] 12.2 select 함수 사용|작성자 Yun