Select 함수

OS/Linux 2015. 12. 13. 14:58

int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

nfds : 관리하는 파일의 개수 등록, 파일의 개수는 최대 파일 지정 번호 +1

fd_set : 관리하는 파일의 지정번호가 등록되어 있는 비트 배열 구조체

    readfds : 읽을 데이터가 있는 지 검사하기 위한 파일 목록

    writefds : 쓰여진 데이터가 있는 지 검사하기 위한 파일 목록

    exceptfds : 파일에 예외 사항들이 있는 지 검사하기 위한 파일 목록

timeout : select 함수는 fd_set에 등록된 파일들에 데이터 변경이 있는 지를 timeout동안 기다린다. 만약 timeout시간 동안 변경이 없다면 0을 반환. ex) 파일 지정 번호가 3이라면 4번째 비트 배열에 대응된다.

변경된 데이터가 있다면 해당 비트값이 1로 설정이 되고, 프로그램은 이 비트 값을 검사함으로써 어떤 파일 지정 번호에 변경된 데이터가 있는 지 확인해서 읽기/쓰기를 하면 된다.


select 함수는 데이터가 변경된 파일의 개수, 즉 fd_set에서 비트 값이 1인 필드의 개수를 반환한다. 데이터가 변경된 파일의 목록을 반환하지 않는다는 것에 주목해야 한다. 만약 최대 파일 지정 번호가 1000이고 select가 1을 반환 했다면, 0번 부터 루프를 순환하면서 어떤 파일이 변경되었는지를 검사해야 한다.


'OS > Linux' 카테고리의 다른 글

리눅스 시스템 콜 명령어  (0) 2015.12.13
recv() 함수  (0) 2015.12.13
PF_INET 과 AF_INET  (0) 2015.12.13
FD_ZERO, FD_SET, FD_ISSET 등  (0) 2015.12.11
bzero함수  (0) 2015.12.10
Posted by 知彼知己百戰不殆
,