oracular (3) endutent.3.gz

Provided by: manpages-de-dev_4.23.1-1_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-Unsicher init race:utent race:utentbuf sig:ALRM    │
       │                        │                       │ timer                                                 │
       ├────────────────────────┼───────────────────────┼───────────────────────────────────────────────────────┤
       │getutid(), getutline()  │ Multithread-Fähigkeit │ MT-Unsicher init race:utent sig:ALRM timer            │
       ├────────────────────────┼───────────────────────┼───────────────────────────────────────────────────────┤
       │pututline()             │ Multithread-Fähigkeit │ MT-Unsicher race:utent sig:ALRM timer                 │
       ├────────────────────────┼───────────────────────┼───────────────────────────────────────────────────────┤
       │setutent(), endutent(), │ Multithread-Fähigkeit │ MT-Unsicher race:utent                                │
       │utmpname()              │                       │                                                       │
       └────────────────────────┴───────────────────────┴───────────────────────────────────────────────────────┘
       In  der  obigen  Tabelle  bedeutet  utent  in  race:utent,  dass,  falls  eine der Funktionen setutent(),
       getutent(), getutid(), getutline(), pututline(), utmpname()  oder  endutent()  in  verschiedenen  Threads
       eines  Programms  parallel  verwandt  werden,  konkurrierende Zugriffe auf Daten (»data races«) auftreten
       könnten.

STANDARDS

       Keine.

GESCHICHTE

       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.

       #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
       Funktionen 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"));
           entry.ut_time = time(NULL);
           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.Schauer@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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨debian-l10n-german@lists.debian.org⟩.