Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

endutxent, getutxent, getutxid, getutxline, pututxline, setutxent - utmpx-Einträge verwalten

&pagelevel(4)&pagelevel

Definition

#include <utmpx.h>

void endutxent (void);

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);

Beschreibung

Diese Funktionen ermöglichen den Zugriff auf die Benutzer-Abrechnungsdatei (user accounting database) /var/adm/utmpx.

getutxent(), getutxid() und getutxline() liefern einen Zeiger auf eine utmpx-Struktur, die folgende Elemente enthält:

char     ut_user[32];  /* Anmeldenamen des Benutzers */
char     ut_id[4];     /* /sbin/inittab id (normalerweise Zeilennr) */
char     ut_line[32];  /* Gerätename (Konsole, lnxx) */
pid_t    ut_pid;       /* Prozessnummer */
short    ut_type;      /* Art des Eintrags */
struct   exit_status {
    short     e_termination;  /* Ende-Status */
    short     e_exit;         /* Exit-Status */
} ut_exit;   /* Exit-Status eines Prozesses markiert als DEAD_PROCESS */
struct timeval ut_tv;  /* Zeiteintrag gemacht */
long     ut_session;   /* Sitzungs-ID, verwendet für Windowing  */
short    ut_syslen;    /* signifikante Länge von ut_host */
char     ut_host[257]; /* Host-Name, falls gegeben */

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 vorwärts, bis ein Eintrag gefunden wird, dessen ut_type dem id->ut_type entspricht, wenn der angegebene Typ RUN_LVL, BOOT_TIME, OLD_TIME oder NEW_TIME ist. Ist der in id angegebene Typ INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS oder DEAD_PROCESS, dann liefert getutxid() einen Zeiger auf den ersten Eintrag, dessen Typ einem dieser vier Typen entspricht und dessen Komponente ut_id dem Wert des übergebenen id->ut_id entspricht. Wird das Dateiende erreicht, ohne dass ein entsprechender Eintrag gefunden wurde, scheitert die Operation.

Bei allen Einträgen, die mit getutxid() gefunden werden, bezeichnet die Komponente ut_type den Typ des Eintrags. Jeder Eintrag enthält, abhängig vom Wert von ut_type, weitere Daten, die für die Verarbeitung von Bedeutung sind:

Wert von ut_type

weitere Komponenten

EMPTY

keine weiteren Daten

BOOT_TIME

ut_tv

OLD_TIME

ut_tv

NEW_TIME

ut_tv

USER_PROCESS

ut_id, ut_user (Benutzerkennung), ut_line, ut_pid, ut_tv

INIT_PROCESS

ut_id, ut_pid, ut_tv

LOGIN_PROCESS 

ut_id, ut_user (implementierungsspezifischer Name des login-Prozesses), ut_pid, ut_tv

DEAD_PROCESS

ut_id, ut_pid, ut_tv

getutxline() sucht vorwärts von der aktuellen Position in der Datei utmpx, bis ein Eintrag mit dem Typ LOGIN_PROCESS oder USER_PROCESS gefunden wird, dessen ut_line Zeichenkette line->ut_line entspricht. Wenn das Dateiende erreicht wird, ohne dass 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, dass der Anwender von pututxline() den entsprechenden Eintrag mit einer der getutx()-Funktionen 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ückgegeben. Um pututxline() anwenden zu können, muss der Prozess über die geeignete Privilegierung verfügen.

setutxent() setzt die Position des Eingabe-Streams auf den Dateianfang. Dies sollte gemacht werden, bevor in der gesamten Datei nach einem neuen Eintrag gesucht wird.

endutxent() schließt die geöffnete Datei.

endutxent(), getutxent(), getutxid(), getutxline(),  pututxline() und setutxent() sind nicht threadsicher.

Returnwert

getutxent(), getutxid() und getutxline():

Zeiger auf eine utmpx-Struktur



bei Erfolg. Die zurückgelieferte Struktur enthält eine Kopie des gewünschten Eintrags in der Benutzer-Abrechnungsdatei.


Nullzeiger

bei Dateiende oder Fehler.


pututxline():

Zeiger auf eine utmpx-Struktur



bei Erfolg. Die zurückgelieferte Struktur enthält eine Kopie des Eintrags, der in die Benutzer-Abrechnungsdatei geschrieben wurde.

Fehler

pututxline() schlägt fehl, wenn gilt:


EPERM

Der Prozess verfügt nicht über eine ausreichend hohe Privilegierung.

Hinweise

Der Returnwert zeigt in einen statischen Bereich, der von einem nachfolgenden Aufruf von getutxid() oder getutxline() überschrieben wird.

Der aktuellste Eintrag wird in einer statischen Struktur abgelegt. Bevor erneut auf die Datei zugegriffen wird, muss 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 muss nach jeder erfolgreichen Suchoperation die statische Struktur gelöscht werden; andernfalls gibt getutxline() immer wieder dieselbe Struktur zurück.

Das implizite Lesen durch pututxline() (wenn die korrekte Position in der Datei noch nicht erreicht wurde) verändert nicht den Inhalt der statischen Struktur, die von getut xent(), getutxid() oder getutxline() zurückgeliefert wird, da pututxline() vor dem Lesen den Inhalt der Struktur sichert.

Die Größe der Vektoren in der Struktur kann mit dem Operator sizeof bestimmt werden.

Siehe auch

utmpx.h.