getut(3C) getut(3C)
NAME
getut: getutent, getutid, getutline, pututline, setutent, endutent,
utmpname - Auf utmp-Dateieintrag zugreifen
SYNTAX
#include <utmp.h>
struct utmp *getutent(void);
struct utmp *getutid(const struct utmp *id);
struct utmp *getutline(const struct utmp *line);
struct utmp *pututline(const struct utmp *utmp);
void setutent(void);
void endutent(void);
int utmpname(const char *file);
BESCHREIBUNG
getutent(), getutid(), getutline() und pututline() geben jeweils einen
Zeiger auf eine Struktur mit den folgenden Elementen zurück:
char utuser[8]; /* Login-Name des Benutzers */
char utid[4]; /* /sbin/inittab id (meist # der Zeile) */
char utline[12]; /* Gerätename (Konsole, lnxx) */
short utpid; /* Prozeßnummer */
short uttype; /* Eintragstyp */
struct exitstatus {
} utexit; /* Exit-Status eines Prozesses, */
/* der als DEADPROCESS markiert ist. */
timet uttime; /* Uhrzeit-Eintrag ist erfolgt */
Die Struktur exitstatus umfaßt die folgenden Elemente:
short etermination; /* Ende-Status */
short eexit; /* Exit-Status */
getutent() liest den nächsten Eintrag von einer utmp-ähnlichen Datei.
Ist die Datei noch nicht geöffnet, wird sie von diesem Kommando geöff-
net. Ist das Dateiende erreicht, ist getutent() erfolglos.
getutid() sucht vom aktuellen Punkt vorwärts in der utmp-atei, bis es
einen Eintrag mit einem uttype findet, der mit id->uttype überein-
stimmt, wenn der angegebene Typ RUNLVL, BOOTTIME, OLDTIME oder
NEWTIME ist. Wenn der in id angegebene Typ INITPROCESS, LOGINPROCESS,
USERPROCESS oder DEADPROCESS ist, dann gibt getutid() einen Zeiger auf
den ersten Eintrag zurück, dessen Typ einer dieser vier Typen ist und
dessen utid-Feld id->utid entspricht. Wenn das Ende der Datei ohne
passenden Eintrag erreicht wird, ist das Kommando erfolglos.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getut(3C) getut(3C)
getutline() sucht vom aktuellen Punkt vorwärts in der utmp-Datei, bis
es einen Eintrag des Typs LOGINPROCESS oder USERPROCESS findet, der
außerdem auch eine Zeichenkette utline aufweist, die der Zeichenkette
line->utline entspricht. Wenn das Ende der Datei erreicht ist, ohne
daß ein entsprechender Eintrag gefunden wurde, ist das Kommando
erfolglos.
pututline() schreibt die angegebene utmp-Struktur in die utmp-Datei.
Es sucht unter Verwendung von getutid() vorwärts nach der richtigen
Stelle. Es wird erwartet, daß der Benutzer von pututline() bereits mit
einer getut()-Routine nach dem richtigen Eintrag gesucht hat. In die-
sem Fall führt pututline() keine Suche aus. Wenn pututline() keine
entsprechende Stelle für den neuen Eintrag findet, hängt es diesen an
das Ende der Datei. Es gibt einen Zeiger auf die Struktur utmp zurück.
Wenn die gesamte Datei geprüft werden soll, muß vor der Suche nach einem
Eintrag der Schreib-/Lesezeiger an den Anfang der Datei zurückgesetzt
werden. Dieses Rücksetzen ist vor jeder Suche nach einem neuen Eintrag
auszuführen, wenn eine Prüfung der gesamten Datei gewünscht ist.
endutent() schließt die geöffnete Datei.
utmpname() ermöglicht dem Benutzer, eine andere Datei als
/var/adm/utmp zu durchsuchen. Üblicherweise handelt es sich dabei um
die Datei /var/adm/wtmp. Wenn diese Datei nicht vorhanden ist, zeigt
sich dies erst beim ersten Versuch, auf diese Datei zuzugreifen. utmp-
name() eröffnet die Datei nicht. Es schließt lediglich die alte Datei,
wenn sie gerade geöffnet ist, und sichert den neuen Dateinamen.
ERGEBNIS
Ein Nullzeiger wird bei erfolglosem Lesen zurückgegeben, wobei es sich
um fehlende Erlaubnis, Erreichen des Dateiendes oder erfolgloses
Schreiben handeln kann.
HINWEISE
Der aktuellste Eintrag wird in einer statischen Struktur gesichert.
Soll auf eine Datei mehrfach zugegriffen werden, müssen die Einträge
vor dem nächsten Zugriff kopiert werden. Bei jedem Aufruf von getu-
tid() oder getutline() prüft die Funktion zunächst die statische
Struktur, bevor sie weitere E/A ausführt. Wenn der Inhalt der stati-
schen Struktur dem Inhalt der gesuchten Struktur entspricht, wird die
Suche beendet. Aus diesem Grunde ist es für getutline() zum Suchen
nach mehrfachem Auftreten erforderlich, die statische Struktur nach
jedem Erfolg zu löschen, weil getutline() andernfalls immer nur die-
selbe Struktur zurückgeben würde. Es gibt jedoch eine Ausnahme zu der
Regel über das Löschen der Struktur vor dem Ausführen weiterer Lese-
Operationen. Das implizierte Lesen, das von pututline() ausgeführt
wird (wenn es feststellt, daß es sich nicht schon am richtigen Platz
in der Datei befindet), beschädigt den Inhalt der von den Funktionen
getutent(), getutid() oder getutline() zurückgegebenen statischen
Struktur nicht, wenn der Benutzer diesen Inhalt gerade geändert und
den Zeiger an pututline() zurückgegeben hat.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
getut(3C) getut(3C)
Diese Funktionen verwenden gepufferte Standard-E/A für die Eingabe;
pututline() jedoch schreibt ungepuffert, um Wettlaufbedingungen zwi-
schen den Prozessen zu vermeiden, die versuchen, die Dateien utmp und
wtmp zu ändern.
DATEIEN
/var/adm/utmp
/var/adm/wtmp
SIEHE AUCH
ttyslot(3C), utmp(4).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98