select() jest zdefiniowana jako:Zapytanie o wybrać System połączeń
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);
nfds reprezentuje najwyższy deskryptor we wszystkich podanych zestawów plus jeden. Chciałbym wiedzieć, dlaczego te dane są wymagane dla select(), gdy dostępna jest informacja fd_set.
Jeśli FD w zestawie powiedzą, 4, 8, 9, wartość nfds będzie 10. Wybrał() moniter fds 9,8,7,6,5,4?
Ale liczba bitów w int wynosi 32, ale jak może monitorować dowolny plik fd o wartości większej niż 31 – Poorna
Czy ktoś może odpowiedzieć na ten komentarz? – euphoria83
@Shishir: Posix definiuje 'fd_set' jako strukturę. Wewnętrzne implementacje są zdefiniowane, ale popularną implementacją jest to, że struktura zawiera tablicę longów z wystarczającą liczbą bitów w tablicy, aby objąć wszystkie możliwe fd. Działa to, ponieważ Posix wymaga również "otwartego", aby zwrócić "najniższy ponumerowany nieużywany deskryptor pliku". Więc nie przekroczysz zakresu tablicy, chyba że masz otwarte pliki FD_SETSIZE. http://pubs.opengroup.org/onlinepubs/007904975/basedefs/sys/select.h.html – indiv