.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright 1995 Mark D. Roth (roth@uiuc.edu)
.\"
.\" SPDX-License-Identifier: GPL-2.0-or-later
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Solaris manpages
.\"
.\" Modified Thu Jul 25 14:43:46 MET DST 1996 by Michael Haardt
.\"     <michael@cantor.informatik.rwth-aachen.de>
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH getutent 3 "2. Mai 2024" "Linux man\-pages 6.9.1" 
.SH BEZEICHNUNG
getutent, getutid, getutline, pututline, setutent, endutent, utmpname \- auf
Einträge der utmp\-Datei zugreifen
.SH BIBLIOTHEK
Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP)
.SH ÜBERSICHT
.nf
\fB#include <utmp.h>\fP
.P
\fBstruct utmp *getutent(void);\fP
\fBstruct utmp *getutid(const struct utmp *\fP\fIut\fP\fB);\fP
\fBstruct utmp *getutline(const struct utmp *\fP\fIut\fP\fB);\fP
.P
\fBstruct utmp *pututline(const struct utmp *\fP\fIut\fP\fB);\fP
.P
\fBvoid setutent(void);\fP
\fBvoid endutent(void);\fP
.P
\fBint utmpname(const char *\fP\fIDatei\fP\fB);\fP
.fi
.SH BESCHREIBUNG
Neue Applikationen sollten die in POSIX.1 spezifizierten »utmpx«\-Versionen
dieser Funktionen verwenden, siehe STANDARDS.
.P
\fButmpname\fP() setzt den Namen der Datei im utmp\-Format, auf die die anderen
utmp\-Funktionen zugreifen. Wenn \fButmpname\fP() nicht benutzt wird, um den
Dateinamen zu setzen bevor die anderen Funktionen benutzt werden, wird von
diesen \fB_PATH_UTMP\fP angenommen, wie in \fI<paths.h>\fP definiert.
.P
\fBsetutent\fP() setzt den Dateizeiger auf den Anfang der Datei utmp zurück. Im
Allgemeinen ist es sinnvoll, dies vor Verwendung der anderen Funktionen
aufzurufen.
.P
\fBendutent\fP() schließt die Datei utmp. Sie sollte aufgerufen werden, wenn
die Verwendung der anderen Funktionen im Benutzercode beendet ist.
.P
\fBgetutent\fP() 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 \fButmp\fP(5)
aufgeschlüsselt.
.P
\fBgetutid\fP() sucht ab der aktuellen Dateiposition in der Datei utmp
vorwärts, basierend auf \fIut\fP. Wenn \fIut\->ut_type\fP gleich \fBRUN_LVL\fP,
\fBBOOT_TIME\fP, \fBNEW_TIME\fP oder \fBOLD_TIME\fP ist, findet \fBgetutid\fP() den
ersten Eintrag, dessen Feld \fIut_type\fP \fIut\->ut_type\fP entspricht. Wenn
\fIut\->ut_type\fP gleich \fBINIT_PROCESS\fP, \fBLOGIN_PROCESS\fP, \fBUSER_PROCESS\fP
oder \fBDEAD_PROCESS\fP ist, findet \fBgetutid\fP() den ersten Eintrag, dessen
Feld \fIut_id\fP \fIut\->ut_id\fP entspricht.
.P
\fBgetutline\fP() sucht ab der aktuellen Dateiposition in der Datei utmp
vorwärts. Die Funktion überprüft Einträge, deren Feld \fIut_type\fP gleich
\fBUSER_PROCESS\fP oder \fBLOGIN_PROCESS\fP ist und gibt den ersten Eintrag
zurück, dessen Feld \fIut_line\fP \fIut\->ut_line\fP entspricht.
.P
\fBpututline\fP() schreibt die utmp\-Struktur \fIut\fP in die Datei utmp. Die
Funktion benutzt \fBgetutid\fP(), um den geeigneten Platz in der Datei für das
Einfügen des neuen Eintrags zu finden. Wenn kein geeigneter Platz für \fIut\fP
gefunden werden kann, hängt \fBpututline\fP() den neuen Eintrag am Ende der
Datei an.
.SH RÜCKGABEWERT
\fBgetutent\fP(), \fBgetutid\fP() und \fBgetutline\fP() liefern bei Erfolg einen
Zeiger auf eine \fIstruct utmp\fP\-Struktur zurück und NULL bei Fehlern (dies
schließt den Fall ein, dass ein Eintrag nicht gefunden wird, »record not
found«). Die Struktur \fIstruct utmp\fP wird als statischer Speicher alloziert
und kann von nachfolgenden Aufrufen überschrieben werden.
.P
Bei Erfolg gibt \fBpututline\fP() \fIut\fP zurück; bei Fehlern gibt die Funktion
NULL zurück.
.P
Wenn der Name erfolgreich gespeichert wurde, gibt \fButmpname\fP() 0 zurück,
bei Fehlern \-1.
.P
Im Fehlerfall setzen diese Funktionen \fIerrno\fP, um den Fehler anzuzeigen.
.SH FEHLER
.TP 
\fBENOMEM\fP
Speicher aufgebraucht.
.TP 
\fBESRCH\fP
Eintrag nicht gefunden.
.P
\fBsetutent\fP(), \fBpututline\fP() und die \fBgetut*\fP()\-Funktionen können aus den
gleichen Gründen fehlschlagen wie in \fBopen\fP(2) beschrieben.
.SH DATEIEN
.TP 
\fI/var/run/utmp\fP
Datenbank aktuell angemeldeter Benutzer
.TP 
\fI/var/log/wtmp\fP
Datenbank früherer Benutzeranmeldungen
.SH ATTRIBUTE
Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt
verwandten Ausdrücke.
.TS
allbox;
lb lb lbx
l l l.
Schnittstelle	Attribut	Wert
T{
.na
.nh
\fBgetutent\fP()
T}	Multithread\-Fähigkeit	T{
.na
.nh
MT\-Unsicher init race:utent
race:utentbuf sig:ALRM timer
T}
T{
.na
.nh
\fBgetutid\fP(),
\fBgetutline\fP()
T}	Multithread\-Fähigkeit	T{
.na
.nh
MT\-Unsicher init race:utent
sig:ALRM timer
T}
T{
.na
.nh
\fBpututline\fP()
T}	Multithread\-Fähigkeit	T{
.na
.nh
MT\-Unsicher race:utent
sig:ALRM timer
T}
T{
.na
.nh
\fBsetutent\fP(),
\fBendutent\fP(),
\fButmpname\fP()
T}	Multithread\-Fähigkeit	MT\-Unsicher race:utent
.TE
.P
In der obigen Tabelle bedeutet \fIutent\fP in \fIrace:utent\fP, dass, falls eine
der Funktionen \fBsetutent\fP(), \fBgetutent\fP(), \fBgetutid\fP(), \fBgetutline\fP(),
\fBpututline\fP(), \fButmpname\fP() oder \fBendutent\fP() in verschiedenen Threads
eines Programms parallel verwandt werden, konkurrierende Zugriffe auf Daten
(»data races«) auftreten könnten.
.SH STANDARDS
Keine.
.SH GESCHICHTE
XPG2, SVr4.
.P
In XPG2 und SVID 2 ist dokumentiert, dass die Funktion \fBpututline\fP()
\fIvoid\fP zurückgibt und das tut sie auch auf vielen Systemen (AIX,
HP\-UX). HP\-UX führt eine neue Funktion \fB_pututline\fP() mit dem oben
angegebenen Prototyp für \fBpututline\fP() ein.
.P
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
.P
.RS 4
.EX
\fB#include <utmpx.h>\fP
.P
\fBstruct utmpx *getutxent(void);\fP
\fBstruct utmpx *getutxid(const struct utmpx *);\fP
\fBstruct utmpx *getutxline(const struct utmpx *);\fP
\fBstruct utmpx *pututxline(const struct utmpx *);\fP
\fBvoid setutxent(void);\fP
\fBvoid endutxent(void);\fP
.EE
.RE
.P
Diese Funktionen werden von der Glibc bereitgestellt und erledigen die
gleiche Aufgabe wie ihre Äquivalente ohne das »x«, aber verwenden \fIstruct utmpx\fP, welche unter Linux als das Gleiche wie \fIstruct utmp\fP definiert
ist. Der Vollständigkeit wegen stellt Glibc auch \fButmpxname\fP() bereit,
obwohl diese Funktion nicht von POSIX.1 beschrieben wird.
.P
Auf manchen anderen Systemen ist die \fIutmpx\fP\-Struktur eine Obermenge der
\fIutmp\fP\-Struktur mit zusätzlichen Feldern und größeren Versionen der
vorhandenen Felder. Zudem werden auch parallele Dateien unterstützt, oft
\fI/var/*/utmpx\fP und \fI/var/*/wtmpx\fP.
.P
Die Linux\-Glibc auf der anderen Seite verwendet keine parallele
\fIutmpx\fP\-Datei, weil ihre \fIutmp\fP\-Struktur schon groß genug ist. Die oben
aufgeführten »x«\-Funktionen sind nur Aliase für ihre Gegenstücke ohne »x«
(z.\ B. ist \fBgetutxent\fP() ein Alias für \fBgetutent\fP()).
.SH ANMERKUNGEN
.SS "Anmerkungen zur Glibc"
Die oben erwähnten Funktionen sind nicht multithread\-fähig. Glibc fügt
ablaufinvariante Versionen hinzu.
.P
.nf
\fB#include <utmp.h>\fP
.P
\fBint getutent_r(struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP
\fBint getutid_r(struct utmp *\fP\fIut\fP\fB,\fP
\fB              struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP
\fBint getutline_r(struct utmp *\fP\fIut\fP\fB,\fP
\fB                struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP
.fi
.P
Mit Glibc erforderliche Feature\-Test\-Makros (siehe
\fBfeature_test_macros\fP(7)):
.P
\fBgetutent_r\fP(), \fBgetutid_r\fP(), \fBgetutline_r\fP():
.nf
    _GNU_SOURCE
        || /* Seit Glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */    _SVID_SOURCE || _BSD_SOURCE
.fi
.P
Diese Funktionen sind GNU\-Erweiterungen, Gegenstücke der Funktionen gleichen
Namens ohne den Suffix _r. Das Argument \fIubuf\fP 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 \fI* ubufp\fP. Tritt ein Fehler auf,
geben diese Funktionen \-1 zurück. Es gibt keine utmpx\-Äquivalente dieser
Funktionen. (POSIX.1 beschreibt diese Funktionen nicht.)
.SH 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 \fBgetpwuid\fP(3) und
\fBttyname\fP(3) prüfen.
.P
.\" SRC BEGIN (getutent.c)
.EX
#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);
}
.EE
.\" SRC END
.SH "SIEHE AUCH"
\fBgetutmp\fP(3), \fButmp\fP(5)
.PP
.SH Ü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.
.PP
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License Version 3
.UE
oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
.PP
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an die
.MT debian-l10n-german@lists.debian.org
Mailingliste der Übersetzer
.ME .