BEZEICHNUNG¶
getutent, getutid, getutline, pututline, setutent, endutent, utmpname - auf
  Einträge der utmp-Datei zugreifen
ÜBERSICHT¶
#include <utmp.h>
 
struct utmp *getutent(void);
 
struct utmp *getutid(struct utmp *ut);
 
struct utmp *getutline(struct utmp *ut);
 
struct utmp *pututline(struct utmp *ut);
 
void setutent(void);
 
void endutent(void);
 
int utmpname(const char *file);
BESCHREIBUNG¶
Neue Applikationen sollten die in POSIX.1 spezifizierten
  »utmpx«-Versionen dieser Funktionen verwenden, siehe KONFORM ZU.
 
utmpname() setzt den Namen der Datei im utmp-Format, auf die die anderen
  utmp-Funktionen zugreifen. Wenn 
utmpname() nicht benutzt wird, um den
  Dateinamen zu setzen bevor die anderen Funktionen benutzt werden, wird von
  diesen 
_PATH_UTMP angenommen, wie in 
<paths.h> definiert.
setutent() setzt den Dateizeiger auf den Anfang der Datei utmp
  zurück. Im Allgemeinen ist es sinnvoll, dies vor Verwendung der anderen
  Funktionen aufzurufen.
endutent() schließt die Datei utmp. Sie sollte aufgerufen werden,
  wenn die Verwendung der anderen Funktionen im Benutzercode beendet ist.
getutent() liest eine Zeile ab der aktuellen Dateiposition in der Datei
  utmp. Es wird ein Zeiger auf eine Struktur zurückgegeben, welche die
  Felder der Zeile enthält. Die Definition dieser Struktur ist in
  
utmp(5) aufgeschlüsselt.
getutid() sucht ab der aktuellen Dateiposition in der Datei utmp
  vorwärts, basierend auf 
ut. Wenn 
ut->ut_type gleich
  
RUN_LVL, 
BOOT_TIME, 
NEW_TIME oder 
OLD_TIME ist,
  findet 
getutid() den ersten Eintrag, dessen Feld 
ut_type
  ut->ut_type entspricht. Wenn 
ut->ut_type gleich
  
INIT_PROCESS, 
LOGIN_PROCESS, 
USER_PROCESS oder
  
DEAD_PROCESS ist, findet 
getutid() den ersten Eintrag, dessen
  Feld 
ut_id ut->ut_id entspricht.
getutline() sucht ab der aktuellen Dateiposition in der Datei utmp
  vorwärts. Die Funktion überprüft Einträge, deren Feld
  
ut_type gleich 
USER_PROCESS oder 
LOGIN_PROCESS ist und
  gibt den ersten Eintrag zurück, dessen Feld 
ut_line
  ut->ut_line entspricht.
pututline() schreibt die utmp-Struktur 
ut in die Datei utmp. Die
  Funktion benutzt 
getutid(), um den geeigneten Platz in der Datei
  für das Einfügen des neuen Eintrags zu finden. Wenn kein geeigneter
  Platz für 
ut gefunden werden kann, hängt 
pututline()
  den neuen Eintrag am Ende der Datei an.
RÜCKGABEWERT¶
getutent(), 
getutid() und 
getutline() liefern bei Erfolg
  einen Zeiger auf eine 
struct utmp-Struktur zurück und NULL bei
  Fehlern (dies schließt den Fall ein, dass ein Eintrag nicht gefunden
  wird, »record not found«). Die Struktur 
struct utmp wird als
  statischer Speicher alloziert und kann von nachfolgenden Aufrufen
  überschrieben werden.
 
Bei Erfolg gibt 
pututline() 
ut zurück; bei Fehlern gibt die
  Funktion NULL zurück.
 
Wenn der Name erfolgreich gespeichert wurde, gibt 
utmpname() 0
  zurück, bei Fehlern -1.
FEHLER¶
  - ENOMEM
 
  - Speicher aufgebraucht.
 
  - ESRCH
 
  - Eintrag nicht gefunden.
 
setutent(), 
pututline() und die 
getut* ()-Funktionen
  können aus den gleichen Gründen fehlschlagen wie in 
open(2)
  beschrieben.
DATEIEN¶
/var/run/utmp	Datenbank aktuell angemeldeter Benutzer
 
/var/log/wtmp	Datenbank früher angemeldeter Benutzer
XPG2, SVr4.
In XPG2 und SVID 2 ist dokumentiert, dass die Funktion 
pututline()
  
void zurückgibt und das tut sie auch auf vielen Systemen (AIX,
  HP-UX, Linux Libc5). HP-UX führt eine neue Funktion 
_pututline()
  mit dem oben angegebenen Prototyp für 
pututline() ein (findet sich
  auch unter Linux Libc5).
Alle diese Funktionen sind jetzt auf Nicht-Linux-Systemen überholt.
  POSIX.1-2001 folgt SUSv1 erwähnt keine dieser Funktionen, sondern nutzt
 
#include <utmpx.h>
 
struct utmpx *getutxent(void);
 
struct utmpx *getutxid(const struct utmpx *);
 
struct utmpx *getutxline(const struct utmpx *);
 
struct utmpx *pututxline(const struct utmpx *);
 
void setutxent(void);
 
void endutxent(void);
Diese Funktionen werden von der Glibc bereitgestellt und erledigen die gleiche
  Aufgabe wie ihre Äquivalente ohne das »x«, aber verwenden
  
struct utmpx, welche unter Linux als das Gleiche wie 
struct
  utmp definiert ist. Der Vollständigkeit wegen stellt Glibc auch
  
utmpxname() bereit, obwohl diese Funktion nicht von POSIX.1 beschrieben
  wird.
Auf manchen anderen Systemen ist die 
utmpx-Struktur eine Obermenge der
  
utmp-Struktur mit zusätzlichen Feldern und größeren
  Versionen der vorhandenen Felder. Zudem werden auch parallele Dateien
  unterstützt, oft 
/var/*/utmpx und 
/var/*/wtmpx.
Die Linux-Glibc auf der anderen Seite verwendet keine parallele
  
utmpx-Datei, weil ihre 
utmp-Struktur schon groß genug ist.
  Die oben aufgeführten »x«-Funktionen sind nur Aliase für
  ihre Gegenstücke ohne »x« (z. B. ist 
getutxent()
  ein Alias für 
getutent()).
ANMERKUNGEN¶
Anmerkungen zur Glibc¶
Die oben erwähnten Funktionen sind thread-sicher. Glibc fügt
  ablaufinvariante Versionen hinzu.
 
#define _GNU_SOURCE    /* oder _SVID_SOURCE oder _BSD_SOURCE;
                          siehe  feature_test_macros(7) */
#include <utmp.h>
 
int getutent_r(struct utmp *ubuf, struct utmp **ubufp);
 
int getutid_r(struct utmp *ut,
              struct utmp *ubuf, struct utmp **ubufp);
 
int getutline_r(struct utmp *ut,
                struct utmp *ubuf, struct utmp **ubufp);
 
Diese Funktionen sind GNU-Erweiterungen, Gegenstücke der Funktionen
  gleichen Namens ohne den Suffix _r. Das Argument 
ubuf gibt diesen
  Funktionen einen Ort für die Speicherung ihrer Ergebnisse. Bei Erfolg
  geben Sie 0 zurück und schreiben einen Zeiger auf das Ergebnis in 
*
  ubufp. Tritt ein Fehler auf, geben diese Funktionen -1 zurück. Es
  gibt keine utmpx-Äquivalente dieser Funktionen. (POSIX.1 beschreibt diese
  Funktionen nicht.)
BEISPIEL¶
Das folgende Beispiel erstellt und entfernt einen umtp-Datensatz. Es wird
  angenommen, dass es in einem Pseudo-Terminal läuft. Zur Verwendung in
  einer realen Anwendung sollten Sie die Rückgabewerte von
  
getpwuid(3) und 
ttyname(3) prüfen.
#include <string.h>
#include <stdlib.h>
#include <pwd.h>
#include <unistd.h>
#include <utmp.h>
int
main(int argc, char *argv[])
{
    struct utmp entry;
    system("Echo vor dem Hinzufügen des Eintrags:;who");
    entry.ut_type = USER_PROCESS;
    entry.ut_pid = getpid();
    strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/"));
    /* stimmt nur für ptys namens /dev/tty[pqr][0-9a-z] */
    strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen("/dev/tty"));
    time(&entry.ut_time);
    strcpy(entry.ut_user, getpwuid(getuid())->pw_name);
    memset(entry.ut_host, 0, UT_HOSTSIZE);
    entry.ut_addr = 0;
    setutent();
    pututline(&entry);
    system("Echo nach dem Hinzufügen des Eintrags:;who");
    entry.ut_type = DEAD_PROCESS;
    memset(entry.ut_line, 0, UT_LINESIZE);
    entry.ut_time = 0;
    memset(entry.ut_user, 0, UT_NAMESIZE);
    setutent();
    pututline(&entry);
    system("Echo nach dem Entfernen des Eintrags:;who");
    endutent();
    exit(EXIT_SUCCESS);
}
SIEHE AUCH¶
getutmp(3), 
utmp(5)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
  
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
  gemeldet werden können, finden sich unter
  
http://www.kernel.org/doc/man-pages/.
 
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Tobias Quathamer
  <toddy@debian.org> und Martin Eberhard Schauer
  <Martin.E.Schauer@gmx.de> erstellt.
 
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public
  License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird
  KEINE HAFTUNG übernommen.
 
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
  Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.