Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

       getutent,  getutid,  getutline,  pututline,  setutent,  endutent,  utmpname - auf Einträge der utmp-Datei
       zugreifen

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

Ü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 *Datei);

BESCHREIBUNG

       Neue Applikationen sollten die in POSIX.1 spezifizierten »utmpx«-Versionen dieser  Funktionen  verwenden,
       siehe STANDARDS.

       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 den Fehler 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üherer Benutzeranmeldungen

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(), getutline()  │ Multithread-Fähigkeit │ MT-Unsafe init race:utent sig:ALRM timer            │
       ├─────────────────────────┼───────────────────────┼─────────────────────────────────────────────────────┤
       │ pututline()             │ Multithread-Fähigkeit │ MT-Unsafe race:utent sig:ALRM timer                 │
       ├─────────────────────────┼───────────────────────┼─────────────────────────────────────────────────────┤
       │ setutent(), endutent(), │ Multithread-Fähigkeit │ MT-Unsafe race:utent                                │
       │ utmpname()              │                       │                                                     │
       └─────────────────────────┴───────────────────────┴─────────────────────────────────────────────────────┘

       In der obigen Tabelle bedeutet utent in race:utent, dass,  falls  eine  der  Funktionen  setutent(),  ge‐
       tutent(),  getutid(), getutline(), pututline(), utmpname() oder endutent() in verschiedenen Threads eines
       Programms parallel verwandt werden, konkurrierende Zugriffe auf Daten (»data races«) auftreten könnten.

STANDARDS

       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 Äquiva‐
       lente ohne das »x«, aber verwenden struct utmpx, welche unter Linux als das Gleiche wie struct utmp defi‐
       niert 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.

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

       Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

       getutent_r(), getutid_r(), getutline_r():
           _GNU_SOURCE
               || /* Seit Glibc 2.19: */ _DEFAULT_SOURCE
               || /* Glibc <= 2.19: */    _SVID_SOURCE || _BSD_SOURCE

       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 Funk‐
       tionen nicht.)

BEISPIELE

       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 <pwd.h>
       #include <stdlib.h>
       #include <string.h>
       #include <time.h>
       #include <unistd.h>
       #include <utmp.h>

       int
       main(void)
       {
           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)

ÜBERSETZUNG

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

Linux man-pages 6.03                             5. Februar 2023                                     getutent(3)