/ / warum der Rückgabewert der Funktion socket oder accept als Index für das Array in redis - sockets, redis verwendet werden kann

warum der Rückgabewert von function socket oder accept als Subscript für Array in redis - Sockets, redis verwendet werden kann

Ich lese Redis Source unten:

int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask,
aeFileProc *proc, void *clientData)
{
if (fd >= eventLoop->setsize) {
errno = ERANGE;
return AE_ERR;
}
aeFileEvent *fe = &eventLoop->events[fd];
//...
}

Das Argument "fd" ist der Rückgabewert der Funktion socket oder accept und wird als Index für das Array "eventLoop-> events" verwendet. Das "eventLoop-> setsize" wird auf 10000 + 1024 = 11024 initialisiert.

Meine Frage ist also: Was ist der Bereich für den Rückgabewert der Funktion socket oder accept? Warum können sie als Index für Array verwendet werden?

Antworten:

1 für die Antwort № 1

Laut POSIX ist ein Dateideskriptor:

"Eine pro Prozess eindeutige, nicht negative Ganzzahlum eine geöffnete Datei zum Zwecke des Dateizugriffs zu identifizieren. Der Wert eines neu erstellten Dateideskriptors reicht von Null bis {OPEN_MAX} -1. Ein Dateideskriptor kann einen Wert größer oder gleich {OPEN_MAX} haben, wenn der Wert von {OPEN_MAX} seit dem Öffnen des Dateideskriptors abgenommen hat (siehe sysconf). Dateideskriptoren können auch zum Implementieren von Nachrichtenkatalogdeskriptoren und Verzeichnisströmen verwendet werden.

In der Praxis hat jetzt jeder Unix / Linux-Prozess einekernel-residente Dateideskriptortabelle, deren Index genau der Dateideskriptor ist. Die Folge ist, dass Dateideskriptoren keine sehr großen Ganzzahlen sein können, da das Betriebssystem alles daran setzt, die Obergrenze der Dateideskriptortabelle nicht zu erhöhen. Die Verwendung eines mit einem Dateideskriptor indizierten Arrays in einer Benutzerbereichsanwendung wie Redis ist daher sicher.

Darüber hinaus garantiert der POSIX-Standard diesWenn ein neuer Dateideskriptor bereitgestellt werden muss, wird systematisch der unbenutzte Dateideskriptor mit der niedrigsten Nummer ausgewählt. Siehe zum Beispiel die POSIX-Spezifikation der offener Anruf Rückgabewert.

Die Folge ist, dass der höchste Dateideskriptor Ihres Prozesses (d. H. Die höchste Grenze der Dateideskriptortabelle) immer niedriger oder gleich der Spitzenzahl der von Ihrem Prozess verwendeten Dateideskriptoren ist.


0 für die Antwort № 2

Was ist der Bereich für den Rückgabewert der Funktion Socket oder akzeptieren?

In Unix / Linux ein Dateideskriptor fd oder Socket-Deskriptor ist eine "kleine Ganzzahl".

Warum können sie als Index für Array verwendet werden?

Weil sie kleine ganze Zahlen sind.