getutx(3C) getutx(3C)
NAME
getutx: getutxent, getutxid, getutxline, pututxline, setutxent,
endutxent, utmpxname, getutmp, getutmpx, updwtmp, updwtmpx - Auf
utmpx-Eintrag zugreifen
SYNTAX
#include <utmpx.h>
struct utmpx *getutxent(void);
struct utmpx *getutxid(const struct utmpx *id);
struct utmpx *getutxline(const struct utmpx *line);
struct utmpx *pututxline(const struct utmpx *utmpx);
void setutxent(void);
void endutxent(void);
int utmpxname(const char *file);
void getutmp(struct utmpx *utmpx, struct utmp *utmp);
void getutmpx(struct utmp *utmp, struct utmpx *utmpx);
void updwtmp(char *wfile, struct utmp *utmp);
void updwtmpx(char *wfilex, struct utmpx *utmpx);
BESCHREIBUNG
getutxent(), getutxid() und getutxline() liefern einen Zeiger auf eine
Struktur des folgenden Typs:
struct utmpx {
char utuser[32]; /* Anmeldenamen des Benutzers */
char utid[4]; /* /sbin/inittab id (normalerweise
Zeilennummer) */
char utline[32]; /* Geraetename (Konsole, lnxx) */
pidt utpid; /* Prozess-ID */
short uttype; /* Art des Eintrags */
struct exitstatus {
short etermination; /* Endestatus */
short eexit; /* Exit-Status */
} utexit; /* Exit-Status eines Prozesses markiert als
DEADPROCESS */
struct timeval uttv; /* Zeiteintrag gemacht */
short utsyslen; /* signifikante Laenge von uthost */
/* einschliesslich abschliessender
Null */
char uthost[257]; /* Host-Name, falls gegeben */
};
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getutx(3C) getutx(3C)
getutxent() liest den nächsten Eintrag aus einer utmpx-ähnlichen
Datei. Wenn die Datei noch nicht geöffnet ist, wird sie geöffnet. Wird
das Dateiende erreicht, scheitert die Operation.
getutxid() sucht von der aktuellen Position in der Datei utmpx vor-
wärts, bis ein Eintrag gefunden wird, dessen uttype dem id->uttype
entspricht, wenn der angegebene Typ RUNLVL, BOOTTIME, OLDTIME oder
NEWTIME ist. Ist der in id angegebene Typ INITPROCESS,
LOGINPROCESS, USERPROCESS oder DEADPROCESS, dann liefert getutxid()
einen Zeiger auf den ersten Eintrag, dessen Typ einem dieser vier
Typen entspricht und dessen utid-Feld id->utid entspricht. Wird das
Dateiende erreicht, ohne daß ein entsprechender Eintrag gefunden
wurde, scheitert die Operation.
uttype Komponente Andere Komponenten mit aussagekräftigen Daten
_______________________________________________________________________
EMPTY Keine anderen
BOOTTIME uttv
OLDTIME uttv
NEWTIME uttv
USERPROCESS utid, utuser (Anmeldename des Benutzers),
utline, utpid, uttv
INITPROCESS utid, utpid, uttv
LOGINPROCESS utid, utuser (implementierungsspezifischer Name
des Anmeldeprozesses), utpid, uttv
DEADPROCESS utid, utpid, uttv
getutxline() sucht vorwärts von der aktuellen Position in der Datei
utmpx, bis ein Eintrag mit dem Typ LOGINPROCESS oder USERPROCESS
gefunden wird, dessen utline Zeichenkette line->utline entspricht.
Wenn das Dateiende erreicht wird, ohne daß ein entsprechender Eintrag
gefunden wird, scheitert die Operation.
pututxline() schreibt die angegebene utmpx-Struktur in die Datei
utmpx. getutxid() wird verwendet, um nach der korrekten Position in
der Datei zu suchen, falls diese noch nicht gegeben ist. Es wird
erwartet, daß der Anwender der pututxline()-Routine den entsprechenden
Eintrag mit einer der getutx()-Routinen gesucht hat. Ist dies der
Fall, führt pututxline() keine Suche durch. Wenn pututxline() keine
entsprechende Stelle für den neuen Eintrag findet, wird der Eintrag am
Dateiende angehängt. Ein Zeiger auf die Struktur utmpx wird zurückge-
geben.
setutxent() setzt die Position des Eingabe-Streams auf den Dateian-
fang. Dies sollte geschehen, bevor in der gesamten Datei nach einem
neuen Eintrag gesucht wird.
endutxent() schließt die geöffnete Datei.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
getutx(3C) getutx(3C)
Mit utmpxname() läßt sich der Dateiname /var/adm/utmpx in einen ande-
ren Namen ändern. In den meisten Fällen handelt es sich bei dieser
anderen Datei um /var/adm/wtmpx. Wenn die Datei nicht existiert, fällt
dies erst auf, wenn der erste Zugriff auf diese Datei ausgeführt wird.
utmpxname() öffnet die Datei nicht; die alte Datei wird lediglich
geschlossen, sofern sie geöffnet war, und der neue Dateiname wird
gespeichert. Der neue Dateiname muß mit dem Zeichen x enden, um die
Namensbehandlung zu vereinfachen. Ansonsten wird der Fehlercode 1
zurückgeliefert.
getutmp() kopiert den Inhalt der utmpx-Struktur in die utmp-Struktur.
Wenn die Daten aus einer Komponente von utmpx nicht in das entspre-
chende Feld von utmp passen, werden Daten abgetrennt.
getutmpx() kopiert die Daten aus den Komponenten der Struktur utmp in
die entsprechenden Komponenten der utmpx-Struktur.
updwtmp() prüft die Existenz von wfile und deren Paralleldatei, dessen
Name durch Anhängen eines x an wfile generiert wird. Wenn nur eine der
Dateien existiert, wird die zweite erzeugt und initialisiert, so daß
sie den Status der existierenden Datei widerspiegelt. utmp wird in die
Datei wfile geschrieben; die entsprechende utmpx-Struktur wird in die
Paralleldatei geschrieben.
updwtmpx() prüft die Existenz von wfilex und deren Paralleldatei, des-
sen Name durch Abtrennen des letzten x von wfilex generiert wird. Wenn
nur eine der Dateien existiert, wird die zweite erzeugt und initiali-
siert, so daß sie den Status der existierenden Datei widerspiegelt.
utmpx wird in die Datei wfilex geschrieben; die entsprechende utmp-
Struktur wird in die Paralleldatei geschrieben.
ERGEBNIS
Tritt beim Prüfen der Zugriffsrechte oder des Dateiendestatus ein
Lese- oder Schreibfehler auf, so wird ein Nullzeiger zurückgegeben.
FEHLER
Die folgende Beschreibung der Fehlercodes ist funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Für die Funktionen endutxent(), getutxent(), getutxid(), getutxline()
und setutxent() sind keine Fehler definiert.
Die Funktion pututxline() kann bei folgender Bedingung fehlschlagen:
EPERM Der Prozeß verfügt nicht über die entsprechenden Berechti-
gungen.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
getutx(3C) getutx(3C)
HINWEISE
Der aktuellste Eintrag wird in einer statischen Struktur abgelegt.
Bevor erneut auf die Datei zugegriffen wird, muß dieser Eintrag
kopiert werden. Bei jedem Aufruf von getutxid() oder getutxline()
überprüfen die Routinen die statische Struktur, bevor weitere E/A-
Operationen ausgeführt werden. Wenn der Inhalt der statischen Struktur
dem gesuchten Muster entspricht, wird nicht weitergesucht. Sollen mit
getutxline() mehrere identische Einträge gesucht werden, so muß nach
jeder erfolgreichen Suchoperation die statische Struktur gelöscht wer-
den; macht man dies nicht, würde getutxline() dieselbe Struktur immer
wieder zurückgeben. Es gibt eine Ausnahme für die obige Regel: Das
implizite Lesen durch pututxline() (wenn die korrekte Position in der
Datei noch nicht erreicht wurde) verletzt nicht den Inhalt der stati-
schen Struktur, die von getutxent(), getutxid() oder getutxline()
zurückgeliefert wird, wenn der Benutzer die Inhalte verändert hat und
den Zeiger an pututxline() zurückgibt.
Diese Routinen verwenden die gepufferte Standard-E/A zur Eingabe;
pututxline() verwendet eine ungepufferte Schreiboperation, um Kon-
flikte zwischen Prozessen zu vermeiden, welche die utmpx- und wtmpx-
Dateien ändern wollen.
DATEIEN
/var/adm/utmp
/var/adm/utmpx
/var/adm/wtmp
/var/adm/wtmpx
SIEHE AUCH
ttyslot(3C), utmp(4), utmpx(4).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98