select() wie folgt definiert ist:Abfrage auf Select System Call
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);
nfds stellt den höchsten Dateideskriptor in allen angegebenen Mengen plus eins. Ich würde gerne wissen, warum diese Daten für select() benötigt werden, wenn die fd_set Informationen verfügbar sind.
Wenn die FDs im Satz sagen, 4, 8, 9, würde der Wert nfds 10 sein. Würde wählen() moniter fds 9,8,7,6,5,4?
Aber die Anzahl der Bits in Int ist 32, aber wie kann es jeden fd mit einem Wert größer als 31 überwachen – Poorna
kann jemand diesen Kommentar beantworten? – euphoria83
@Shishir: Posix definiert 'fd_set' als Struktur. Die Interna sind Implementierungen definiert, aber eine gängige Implementierung besteht darin, dass die Struktur ein Array von Longs mit genügend Bits im Array enthält, um alle möglichen fds abzudecken. Dies funktioniert, weil Posix auch "open" benötigt, um den unbenutzten Dateideskriptor mit der niedrigsten Nummer zurückzugeben. Sie werden also den Bereich des Arrays nur dann überschreiten, wenn FD_SETSIZE-Dateien geöffnet sind. http://pubs.opengroup.org/onlinepubs/007904975/basedefs/sys/select.h.html – indiv