어떻게 모니터 두 파일 설명자를 알고 있지만 4 ~ 5 개의 파일 설명자를 알고 있습니까?Select() 모니터링 3 개 이상의 파일 설명자
다음은 파일 설명자 2 개를 사용하는 방법입니다.
fd_mon = (fd1 > fd2 ? fd1 : fd2) + 1;
select(fd_mon, &readfds, NULL, NULL, NULL);
어떻게 3 개 이상의 파일 설명자를 모니터링 할 수 있습니까?
어떻게 모니터 두 파일 설명자를 알고 있지만 4 ~ 5 개의 파일 설명자를 알고 있습니까?Select() 모니터링 3 개 이상의 파일 설명자
다음은 파일 설명자 2 개를 사용하는 방법입니다.
fd_mon = (fd1 > fd2 ? fd1 : fd2) + 1;
select(fd_mon, &readfds, NULL, NULL, NULL);
어떻게 3 개 이상의 파일 설명자를 모니터링 할 수 있습니까?
(fd1 < fd2 ? fd1 : fd2) < fd3 ? (fd1 < fd2 ? fd1 : fd2) : fd3;
그것은 3 개 변수의를 배열 :
for(i = maxfd = 0; i < nfds; i++) {
if(maxfd < fd[i]) maxfd = fd[i];
FD_SET(...);
}
select(maxfd+1, ...);
'fd_mon = fd1; if (fd2> fd_mon) fd_mon = fd2; if (fd3> fd_mon) fd_mon = fd3;은 이해하기 쉽고 (5 행 이상으로 퍼짐) 확장하기가 훨씬 쉽습니다. 다음과 같이 시작하면 100 % 일관성을 유지할 수 있습니다 :'fd_mon = -1; if (fd1> fd_mon) fd_mon = fd1; ... '. –
@ demic0de - 100 개 이상의 파일 설명자를 선택해야하는 경우 가장 좋은 답변을 선택하는 것이 바람직하지 않습니까? – Joe
FD_SET
매크로를 사용하면 파일 설명자를 select
으로 전달할 집합에 추가 할 수 있습니다. 친구가 필요합니다 FD_ZERO
, FD_ISSET
및 FD_CLR
도 있습니다. 위의 경우, 각 파일 설명자와 동일한 세트에 대해 FD_SET을 계속 호출하십시오.
Google - "man select", 예를 들어 있습니다. * NIX에 얼마나 익숙한 지 모르겠지만 man
(매뉴얼의 약자)은 O/S에 내장 된 도움말 시스템입니다. 시스템 호출에 대한 이러한 질문에 자주 대답합니다. 예를 들어 Ubuntu에 이 있다고 생각하지 않는 경우, 일부 배포판에 설치해야 할 수도 있습니다. 모두 개발 매뉴얼 페이지가 기본적으로 설치됩니다.
각 기술자 열 후 바로 테스트 할 수 : 당신은 당신이있는 기술자를 스틱 수 많은 같은 변수
을 위해 그것을 할 수
max_fd = 0;
fd = open(...);
if (fd > max_fd) {
max_fd = fd;
}
....
select(max_fd+1, &readfds, NULL, NULL, NULL);
어떻게'readfds'를 설정하고 있습니까? 'readfds'를 설정하면'fd_mon'의 값을 결정해야합니다. –
나는 FD_SET() 이렇게하고있다. 그래서 내가 선택할 수있는 번호를 지정할 수 있습니다 내가이 방법으로 할 수있는 3 파일 디스크립터가 .. select (3, & readfds, NULL, NULL, NULL); ? .. thanks, – demic0de
select (2) 대신 poll (2)을 사용하는 것을 고려해야합니다. –