.\" -*- coding: UTF-8 -*- .\" Copyright 1995 Mark D. Roth (roth@uiuc.edu) .\" .\" %%%LICENSE_START(GPLv2+_DOC_FULL) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, see .\" . .\" %%%LICENSE_END .\" .\" References consulted: .\" Linux libc source code .\" Solaris manpages .\" .\" Modified Thu Jul 25 14:43:46 MET DST 1996 by Michael Haardt .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GETUTENT 3 "9. Juni 2020" "" Linux\-Programmierhandbuch .SH BEZEICHNUNG getutent, getutid, getutline, pututline, setutent, endutent, utmpname \- auf Einträge der utmp\-Datei zugreifen .SH ÜBERSICHT \fB#include \fP .PP \fBstruct utmp *getutent(void);\fP .br \fBstruct utmp *getutid(const struct utmp *\fP\fIut\fP\fB);\fP .br \fBstruct utmp *getutline(const struct utmp *\fP\fIut\fP\fB);\fP .PP \fBstruct utmp *pututline(const struct utmp *\fP\fIut\fP\fB);\fP .PP \fBvoid setutent(void);\fP .br \fBvoid endutent(void);\fP .PP \fBint utmpname(const char *\fP\fIfile\fP\fB);\fP .SH BESCHREIBUNG Neue Applikationen sollten die in POSIX.1 spezifizierten »utmpx«\-Versionen dieser Funktionen verwenden, siehe KONFORM ZU. .PP \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\fP definiert. .PP \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. .PP \fBendutent\fP() schließt die Datei utmp. Sie sollte aufgerufen werden, wenn die Verwendung der anderen Funktionen im Benutzercode beendet ist. .PP \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. .PP \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. .PP \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. .PP \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. .PP Bei Erfolg gibt \fBpututline\fP() \fIut\fP zurück; bei Fehlern gibt die Funktion NULL zurück. .PP Wenn der Name erfolgreich gespeichert wurde, gibt \fButmpname\fP() 0 zurück, bei Fehlern \-1. .PP Im Fehlerfall setzen diese Funktionen \fIerrno\fP, um die Ursache anzuzeigen. .SH FEHLER .TP \fBENOMEM\fP Speicher aufgebraucht. .TP \fBESRCH\fP Eintrag nicht gefunden. .PP \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 lbw28 l l l. Schnittstelle Attribut Wert T{ \fBgetutent\fP() T} Multithread\-Fähigkeit T{ MT\-Unsafe init race:utent .br race:utentbuf sig:ALRM timer T} T{ \fBgetutid\fP(), .br \fBgetutline\fP() T} Multithread\-Fähigkeit T{ MT\-Unsafe init race:utent .br sig:ALRM timer T} T{ \fBpututline\fP() T} Multithread\-Fähigkeit T{ MT\-Unsafe race:utent .br sig:ALRM timer T} T{ \fBsetutent\fP(), .br \fBendutent\fP(), .br \fButmpname\fP() T} Multithread\-Fähigkeit MT\-Unsafe race:utent .TE .sp 1 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 "KONFORM ZU" XPG2, SVr4. .PP 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. .PP 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 .PP .RS 4 .EX \fB#include \fP .PP \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 .PP 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. .PP 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. .PP 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. .PP .nf \fB#include \fP \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 .PP Mit Glibc erforderliche Makros (siehe \fBfeature_test_macros\fP(7)): .PP \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 .PP 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. .PP .EX #include #include #include #include #include #include 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); } .EE .SH "SIEHE AUCH" \fBgetutmp\fP(3), \fButmp\fP(5) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Mario Blättermann und Dr. Tobias Quathamer erstellt. 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. 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 .