next up previous contents
Next: SET-Funktionen Up: Beschreibung der Funktionen Previous: User Group

GETNEXT-Funktionen

Die Getnext-Funktionen befinden sich im Modul 'getnext.c'. Sie sind alle von der Art 'void get_next_TABELLENNAME(int *param_list)'. Zweck dieser Funktionen ist es, den nächstgrößeren Indexwert einer Tabelle zu ermitteln. Als Paramter erhalten diese Funktionen wiederum einen Zeiger auf ein Feld von Indexen, die von der Funktion entsprechend verändert werden können.

Viele Tabellen werden über eine fortlaufende Nummer indiziert. Hier ist es möglich, den Index einfach um eins zu erhöhen und dann festzustellen, ob das Ende der Tabelle mit diesem Indexwert überschritten würde. Hierzu wird einfach eine Variable dieser Tabelle mit einer GET-Funktion und dem erhaltenen Indexwert abgefragt. Sollte der Wert nicht existieren, so ist das Ende der Tabelle erreicht und es wird der Index auf -1 gesetzt.

Bei Tabellen, die keine fortlaufende Nummer bzw. einen String zur Indizierung verwenden, gestaltet sich dies natürlich wesentlich schwieriger. Hier wird ebenfalls zur Leistungssteigerung eine Speicherung des zuletzt bestimmten Wertes vorgenommen. Man kann davon ausgehen, daß Tabellen vom Anwender zeilenweise ausgelesen werden. Ist dies der Fall, so muß mehrfach hintereinander für den gleichen Index der folgende Eintrag bestimmt werden. Hier bietet es sich natürlich an, diesen Wert zu speichern und im Falle einer identischen Nachfrage, den gespeicherten Wert zurückzugeben. Diese Speicherung erfolgt wiederum nur innerhalb eines Paketes, außer sie wird mit dem Schalter '-cache' auch paketübergreifend eingeschaltet (siehe GET-Funktionen).

Im Folgenden werden nun die wichtigsten GETNEXT-Funktionen beschrieben:

Noch umständlicher gestaltet sich die Suche, wenn Tabellen von Tabellen indiziert werden sollen. Hier gilt es im einzelnen folgende Möglichkeiten zu beachten:

Dieses Prinzip soll am Beispiel der Funktion 'get_next_UserQuota()' erläutert werden. Die Indizierung erfolgt über zwei Strings: den Usernamen, der einen User (die äußere Tabelle) bestimmt, sowie den Filesystemnamen, der die Filesysteme (die innere Tabelle) identifiziert, für die Quotas angezeigt werden sollen.

Als erstes wird überprüft, ob der angegebene Username existiert. Sollte dies nicht der Fall sein, so wird mit Hilfe der Funktion 'get_next_User()' der Username bestimmt, der dem gegebenen folgt. Da auf jeden Fall das erste Filesystem dieses Users ausgegeben werden soll, wird der zweite Index auf -1 gesetzt. Sollte kein User mehr existieren, dessen Name dem gegebenen lexikographisch folgt, so wird die Funktion verlassen und die auf die User-Tabelle folgende Variable abgefragt.

Sollten wir uns immer noch in der Funktion befinden, so ist die Situation die folgende: Der Index der 'user table' zeigt auf einen existierenden Eintrag, der Index der 'quota table' eventuell nicht. Nun muß also der nächste Eintrag der 'quota table', gefunden werden. Hierzu wird eine Schleife verwendet, die erst verlassen wird, wenn ein gültiger Index gefunden wurde bzw. die äußere Tabelle keine größeren Einträge mehr enthält. Es wird also das Filesystem gesucht und zurückgegeben, das dem gegebenen folgt. Sollte das Ende der Tabelle erreicht werden, so wird wieder der nächstgrößere User-Eintrag bestimmt und der Index der 'quota table' auf -1 gesetzt. Somit wird im nächsten Schleifendurchlauf mit Sicherheit das erste Element der 'quota table' gefunden.

Die Vorgehensweise ist analog zu derer bei den Funktionen 'get_next_GroupUser()' sowie 'get_next_FilesystemBackup()'.


next up previous contents
Next: SET-Funktionen Up: Beschreibung der Funktionen Previous: User Group
Copyright Munich Network Management Team