멀티프로세스구조IO멀티플렉싱.pptx
IO멀티플렉싱
select함수의 단점
1. 전체 파일디스크립터가 나타나는 배열에 생성되어 검사의 대상이 되는 파일디스크립터만 1로 표시하여 일일히 손으로 배열에 넣어 놓아야 함
2. 변화가 있는 파일디스크립터 뿐 아니라 변화가 없는 파일디스크립터까지 나타나 있는 배열을 받아서 일일히 for문을 통해서 1로 표시된 변화가 생긴 파일디스크립터가 무엇인지 찾아야 함
select 함수
fd_set형 변수에 값을 등록, 변경 등에 관한 함수
FD_ZERO(fd_set* fdset)
인자로 전달된 주소의 fd_set형 변수의 모든 비트를 0으로 초기화
FD_SET(int fd, fd_set* fdset)
매개변수 fdset으로 전달된 주소의 변수에 매개변수 fd로 전달된 파일 디스크립터 정보를 등록
FD_CLR(int fd, fd_set* fdset)
매개변수 fdset으로 전달된 주소의 변수에서 매개변수 fd로 전달된 파일 디스크립터 정보를 삭제
FD_ISSET(int fd, fd_set* fdset)
매개변수 fdset으로 전달된 주소의 변수에 매개변수 fd로 전달된 파일 디스크립터 정보가 있으면 양수를 반환
select함수
#include <sys/select.h>
#include <sys/time.h>
int select(int maxfd, fd_set* readset, fd_set* writeset, fd_set* exceptset, const struct timeval* timeout);
성공시 0이상, 실패시 -1 반환
maxfd : 검사 대상이 되는 파일 디스크립터의 수
readset : fd_set형 변수에 '수신된 데이터의 존재여부'에 관심 있는 파일 디스크립터 정보를 모두
등록해서 그 변수의 주소 값을 전달
writeset : fd_set형 변수에 '블로킹 없는 데이터 전송의 가능여부'에 관심 있는 파일 디스크립터
정보를 모두 등록해서 그 변수의 주소 값을 전달
exceptset : fd_set형 변수에 '예외상황의 발생여부'에 관심이 있는 파일 디스크립터 정보를 모두
등록해서 그 변수의 주소 값을 전달
timeout : select 함수호출 이후에 무한정 블로킹 상태에 빠지지 않도록 타임아웃(time-out)을
설정하기 위한인자를 전달
반환 값 : 오류발생시에는 -1이 반환되고, 타임 아웃에 의한 반환 시에는 0이 반환.
그리고 관심대상으로 등록된 파일 디스크립터에 해당 관심에 관련된 변화가
발생하면 0보다 큰 값이 반환되는데, 이 값은 변화가 발생한 파일 디스크립터의 수를 의미
struct timeval
{
long tv_sec; //seconds
long tv_usec; //microseconds
}