'UNIX/Linux select'에 해당되는 글 1건

  1. 2009.11.10 select 함수 2

select 함수

프로그래밍 2009. 11. 10. 00:07 |

select 함수

2개 이상의 입출력을 처리하기 위해서는 어떻게 해야할까 ...
IO 개수만큼 프로세스 혹은 쓰레드를 생성하여 그것을 처리하게 만들 수 있다.
하지만 select 함수를 사용하면 비교적 쉽게 이 문제를 해결할 수 있다.


#include <sys/select.h>

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

FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);


파라미터
nfds
; 입축력 파일 디스크립터의 범위를 표현한다.
ndfs 는 체크할 파일 디스크립터 집합의 최대 값보다 1 큰 값으로 지정한다.

readfds ; 입력 체크를 위한 파일 디스크립터 집합을 저장한다.
fd_set 은 정수 배열을 가지고 있으며, 비트 마스크로써 체크할 파일 디스크립터를 표시해 둔다.

writefds ; 출력 체크를 위한 파일 디스크립터 저장.

errorfds ; 에러에 대한 체크

timeout ; select 함수가 블록되는 시간, NULL 이 되면 입력이 있을 때까지 계속 블록된다.

반환값 ; 성공 시, 준비된 파일 디스크립트 수
실패 시, -1 을 리턴하며, errno 를 설정함.

errorno
- EBADF ; 사용 불가한 파일 디스크립터가 하나 이상 존재
- EINTR ; 시그널에 의한 인터럽트
- EINVAL ; 시간 제한이 잘못되었거나, nfds 가 0 보다 작거나 FD_SETSIZE 보다 큼.



구버전 UNIX 는 select 함수가 sys/time.h 에 정의 되어 있지만,
POSIX 표준은 sys/select.h 에 있음.

잘 쓰여진 글
http://cyhome.cyworld.com/?home_id=a2103157
싸이월드라 막혀 있다면 그 대신
http://jangsalt.tistory.com/entry/C-%EC%96%B8%EC%96%B4-select-%ED%95%A8%EC%88%98

: