Provided by: manpages-de-dev_1.11-1_all bug

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(const struct utmp *ut);
       struct utmp *getutline(const struct utmp *ut);

       struct utmp *pututline(const 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.

       Im Fehlerfall setzen diese Funktionen errno, um die Ursache anzuzeigen.

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

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
       ┌───────────────┬───────────────────────┬──────────────────────────────┐
       │ SchnittstelleAttributWert                         │
       ├───────────────┼───────────────────────┼──────────────────────────────┤
       │ getutent()    │ Multithread-Fähigkeit │ MT-Unsafe init race:utent    │
       │               │                       │ race:utentbuf sig:ALRM timer │
       ├───────────────┼───────────────────────┼──────────────────────────────┤
       │ getutid(),    │ Multithread-Fähigkeit │ MT-Unsafe init race:utent    │
       │ getutline()   │                       │ sig:ALRM timer               │
       ├───────────────┼───────────────────────┼──────────────────────────────┤
       │ pututline()   │ Multithread-Fähigkeit │ MT-Unsafe race:utent         │
       │               │                       │ sig:ALRM timer               │
       ├───────────────┼───────────────────────┼──────────────────────────────┤
       │ setutent(),   │ Multithread-Fähigkeit │ MT-Unsafe race:utent         │
       │ endutent(),   │                       │                              │
       │ utmpname()    │                       │                              │
       └───────────────┴───────────────────────┴──────────────────────────────┘

       In the above table, utent in race:utent signifies that if any of the functions setutent(3),  getutent(3),
       getutid(3),  getutline(3),  pututline(3),  utmpname(3), or endutent(3)  are used in parallel in different
       threads of a program, then data races could occur.

KONFORM ZU

       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). HP-UX führt eine neue Funktion _pututline() mit dem oben angegebenen
       Prototyp für pututline() ein.

       Alle diese Funktionen sind jetzt auf Nicht-Linux-Systemen überholt. POSIX.1-2001 und  POSIX.1-2008  folgt
       SUSv1 und 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 nicht multithread-fähig. 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  4.04  des  Projekts  Linux-man-pages.  Eine  Beschreibung  des
       Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
       sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung dieser Handbuchseite wurde von Dr. Tobias Quathamer <toddy@debian.org>, Martin
       Eberhard Schauer <Martin.E.Schauer@gmx.de> und Mario Blättermann <mario.blaettermann@gmail.com> 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>.

                                                 8. August 2015                                      GETUTENT(3)