int _CONSOLE_KBHIT(void) {
struct timeval tv = { 0L, 0L };
fd_set fds;
FD_ZERO(&fds);
FD_SET(0, &fds);
return select(1, &fds, NULL, NULL, &tv);
}
termios.h 인클루드 하고...
Q1. tv의 멤버값으로 0L 이거는 몬가요 대체??
Q2. 그리고 FD_ZERO랑 FD_SET에서 FD의 의미가 뭐죠 ㅠㅠ
Q3. select는 뭘 하는 함수인가여... 검색하기가 힘드네여 ㅠㅠ
1) 0L은 정수 상수 0에 long이라는 타입까지 함께 지시한 long형 상수 0L임.
2) struct timeval는 시간을 나타내는 구조체. select()에 시간 제한(timeout) 값으로 넘겨주는 값. 0초니까 시간 제한은 0초(바로 select 함수가 끝남).
3) FD_xxx() 매크로는 fd_set 변수를 조작하는 매크로인데 FD_ZERO()는 0으로 만들어 주는 거고, FD_SET()은 특정 자리를 1로 만들어 주는 거임. FD는 file descriptor의 약자인데 리눅스 시스템 콜 open() 함수에서 파일을 열 때 리턴해 주는 파일 번호임. stdin은 0, stdout은 1, stderr는 2로 번호가 처음부터 고정되어 있음. FD_SET(0, &fds;);를 지정함으로써 0번 자리에는 1을 씀으로써 0번 file descriptor에 대해서는 모니터링을 활성화하겠다는 표시를 남김.
4) select() 함수는 모니터링 함수인데, 감시할 대상 개수는 1개이고, read fd 인자에 &fds; (원래는 배열을 넘겨줘야 하지만 1개니까 변수 주소를 넘겨줘도 됨)를 넘겨줘서 0번 file descriptor에 대한 read 신호를 monitoring함. 이 함수가 리턴되면 timeout 시간이 지나거나 read 신호가 발생했을 때인데, timeout=0이니까 바로 return될 거고, 리턴 값은 1이면 읽기 신호가 발생했다는 거고(읽을 게 있다는 거고) 0이면 타임아웃이 걸렸다는 거니까 아무 내용도 없다는 뜻임.
자세한 건 각 함수들에 대해서 검색해서 정보를 찾아봐야 하지만 간략히 설명하면 위와 같음.
친절한 설명 넘넘 감사합니다..