select함수
글쓴이: asleea / 작성시간: 일, 2013/02/17 - 10:35오후
#include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/time.h> int main() { struct timeval a; a.tv_sec = 10; a.tv_usec = 0; fd_set set; FD_ZERO(&set); FD_SET(STDIN_FILENO, &set); while(1) { select(STDIN_FILENO + 1, &set, NULL, NULL, &a); fprintf(stderr, "sec : %ld, usec : %ld\n", a.tv_sec, a.tv_usec) ; } return 0; }
select return시에 timeout 시간이 어떻게 변하는지 눈으로 확인하고자 간단한 코드를 작성하였습니다.
제 생각에는 select에 블록이 되어있을 때 제가 입력을 주면 select가 return되고 timeout에서 남은 시간을 화면에 출력하고
fd_set에는 준비되 파일 디스크립터가 남아 있기 때문에 그대로 STDIN_FILENO이 들어있을테고 다시 select에서 블록이 될 것이라고
생각을 하였는데(다시 입력을 주면 출력을 하고 다시 select에 블록이되는 것을 반복하도록)
첫 loop에서만 블록이되고 입력을 주어 select가 return된 후에는, (2번째 seleoct부터)블록이 되지 않고 계속해서 tiemout시간을 출력합니다.
예를 들면
(select block) (입력) sec : 9, usec : 56 sec : 9, usec : 55 sec : 9, usec : 54 sec : 9, usec : 53 sec : 9, usec : 51 sec : 9, usec : 43 sec : 9, usec : 42 sec : 9, usec : 41 sec : 9, usec : 38 sec : 9, usec : 37 sec : 9, usec : 36 sec : 9, usec : 35 sec : 9, usec : 33 . . . . . sec : 9, usec : 10
제가 먼가 잘못 알고 있는 건가요 ?왜그런지
Forums:
댓글 달기