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
'Programming > Linux_Kernel' 카테고리의 다른 글
linux kernel document - phonet (0) | 2011.03.09 |
---|---|
TASK_KILLABLE : 리눅스에 도입된 새로운 프로세스 상태 (0) | 2011.03.08 |
kernel 동작을 trigger 시킨 process name과 pid 얻기 (0) | 2011.02.21 |
What is mean? __init_refok, __initdata_refok, __exit_refok (0) | 2011.01.25 |
[U-BOOT] U-BOOT 환경변수 설정을 위한 setenv, printenv 및 fw_setenv, fw_printenv (0) | 2011.01.17 |