.\" -*- 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 "5 lutego 2023 r." "Linux man\-pages 6.03" 
.SH NAZWA
getutent, getutid, getutline, pututline, setutent, endutent, utmpname \-
dostęp do wpisów pliku utmp
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <utmp.h>\fP
.PP
\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
.PP
\fBstruct utmp *pututline(const struct utmp *\fP\fIut\fP\fB);\fP
.PP
\fBvoid setutent(void);\fP
\fBvoid endutent(void);\fP
.PP
\fBint utmpname(const char *\fP\fIfile\fP\fB);\fP
.fi
.SH OPIS
Nowe aplikacje powinny używać podanych w standardzie POSIX.1 wersji
\[Bq]utmpx\[rq] tych funkcji, zob. rozdział STANDARDY.
.PP
\fButmpname\fP() ustawia nazwę pliku w formacie utmp, który będzie używany
przez pozostałe funkcje utmp. Jeżeli nie użyto \fButmpname\fP() przed
wywołaniem innych funkcji, to używają one domyślnej nazwy \fB_PATH_UTMP\fP,
zdefiniowanej w \fI<paths.h>\fP.
.PP
\fBsetutent\fP() przesuwa wskaźnik pliku z powrotem na początek pliku
utmp. Funkcja ta powinna zostać wywołana przed wywołaniem którejkolwiek z
pozostałych funkcji.
.PP
\fBendutent\fP() zamyka plik utmp. Powinna być wywołana, gdy program już
zakończył używanie tego pliku przy pomocy innych funkcji.
.PP
\fBgetutent\fP() odczytuje linię z pliku utmp, zaczynając od bieżącej pozycji w
tym pliku. Zwraca wskaźnik do struktury zawierającej pola linii. Definicję
tej struktury opisano w \fButmp\fP(5).
.PP
\fBgetutid\fP() przeszukuje plik w przód, zaczynając od bieżącej pozycji,
biorąc pod uwagę parametr \fIut\fP. Jeżeli  \fIut\->ut_type\fP jest jednym z
\fBRUN_LVL\fP, \fBBOOT_TIME\fP, \fBNEW_TIME\fP lub \fBOLD_TIME\fP, to \fBgetutid\fP()
wyszuka pierwszy rekord, którego pole \fIut_type\fP odpowiada
\fIut\->ut_type\fP. Jeżeli \fIut\->ut_type\fP jest jednym z \fBINIT_PROCESS\fP,
\fBLOGIN_PROCESS\fP, \fBUSER_PROCESS\fP lub \fBDEAD_PROCESS\fP, to \fBgetutid\fP()
wyszuka pierwszy wpis, którego pole \fIut_id\fP  pasuje do \fIut\->ut_id\fP.
.PP
\fBgetutline\fP() przeszukuje plik utmp w przód, zaczynając od bieżącej pozycji
w pliku. Sprawdza wpisy, których \fIut_type\fP jest równe \fBUSER_PROCESS\fP lub
\fBLOGIN_PROCESS\fP, i zwraca pierwszy z nich, którego pole \fIut_line\fP
odpowiada \fIut\->ut_line\fP.
.PP
\fBpututline\fP() zapisuje strukturę \fIut\fP, której typem jest \fIutmp\fP, do pliku
utmp. Używa \fBgetutid\fP(), aby znaleźć odpowiednie miejsce do dodania nowego
rekordu. Jeśli go nie znajdzie, to \fBpututline\fP() doda nowy wpis na końcu
pliku.
.SH "WARTOŚĆ ZWRACANA"
Funkcje \fBgetutent\fP(), \fBgetutid\fP() i \fBgetutline\fP() zwracają wskaźnik do
\fIstruct utmp\fP, jeśli zakończą się powodzeniem, lub NULL w razie wystąpienia
błędu. \fIstruct utmp\fP jest zaalokowana w statycznej przestrzeni danych i
może zostać nadpisana przez kolejne wywołania funkcji.
.PP
Funkcja \fBpututline\fP() zwraca \fIut\fP, jeśli zakończy się powodzeniem, lub
NULL w razie wystąpienia błędu.
.PP
\fButmpname\fP() zwraca 0, jeśli zachowano nową nazwę, lub \-1 w przypadku
błędu.
.PP
W przypadku błędu, funkcje te ustawiają \fIerrno\fP wskazując błąd.
.SH BŁĘDY
.TP 
\fBENOMEM\fP
Brak pamięci.
.TP 
\fBESRCH\fP
Nie znaleziono rekordu.
.PP
Funkcje \fBsetutent\fP(), \fBpututline\fP() i \fBgetut*\fP() mogą także zwrócić błędy
opisane w \fBopen\fP(2).
.SH PLIKI
.TP 
\fI/var/run/utmp\fP
baza danych obecnie zalogowanych użytkowników
.TP 
\fI/var/log/wtmp\fP
baza danych poprzednich logowań użytkowników
.SH ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku
\fBattributes\fP(7).
.ad l
.nh
.TS
allbox;
lb lb lbx
l l l.
Interfejs	Atrybut	Wartość
T{
\fBgetutent\fP()
T}	Bezpieczeństwo wątkowe	T{
MT\-niebezpieczne init race:utent
race:utentbuf sig:ALRM timer
T}
T{
\fBgetutid\fP(),
\fBgetutline\fP()
T}	Bezpieczeństwo wątkowe	T{
MT\-niebezpieczne init race:utent
sig:ALRM timer
T}
T{
\fBpututline\fP()
T}	Bezpieczeństwo wątkowe	T{
MT\-niebezpieczne race:utent
sig:ALRM timer
T}
T{
\fBsetutent\fP(),
\fBendutent\fP(),
\fButmpname\fP()
T}	Bezpieczeństwo wątkowe	MT\-niebezpieczne race:utent
.TE
.hy
.ad
.sp 1
W powyższej tabeli, \fIutent\fP w \fIrace:utent\fP oznacza, że jeśli któraś z
funkcji \fBsetutent\fP(), \fBgetutent\fP(), \fBgetutid\fP(), \fBgetutline\fP(),
\fBpututline\fP(), \fButmpname\fP() lub \fBendutent\fP() jest używana równolegle w
różnych wątkach programu, może nastąpić sytuacja wyścigu danych.
.SH STANDARDY
XPG2, SVr4.
.PP
W dokumentacji XPG2 i SVID2 funkcja \fBpututline\fP() zwraca void, i to jest
to, co ona rzeczywiście zwraca na wielu systemach (AIX, HPUX). HPUX
wprowadza nową funkcję \fB_pututline\fP() o prototypie podanym powyżej dla
\fBpututline\fP().
.PP
Wszystkie te funkcje są przestarzałe na systemach
nielinuksowych. POSIX.1\-2001 i POSIX.1\-2008, naśladując SUSv1, nie zawierają
żadnej z tych funkcji, ale zamiast nich używają
.PP
.RS 4
.EX
\fB#include <utmpx.h>\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
Powyższe funkcje są dostarczane przez glibc i wykonują dokładnie te same
zadania, co ich odpowiedniki bez przyrostka \[Bq]x\[rq], tyle że używają
struktury \fIstruct utmpx\fP, zdefiniowanej pod Linuksem dokładnie tak samo jak
\fIstruct utmp\fP. glibc dostarcza także \fButmpxname\fP(), chociaż POSIX.1 nie
zawiera tej funkcji.
.PP
Na niektórych systemach struktura \fIutmpx\fP jest rozszerzeniem struktury
\fIutmp\fP o dodatkowe pola i o większe wersje istniejących pól. Utrzymywane są
tam  równoległe wersje plików, często jako \fI/var/*/utmpx\fP oraz
\fI/var/*/wtmpx\fP.
.PP
Z drugiej strony linuksowe glibc nie używa pliku \fIutmpx\fP, ponieważ jego
struktura \fIutmp\fP jest już wystarczająco duża. Funkcje \[Bq]x\[rq] opisane
powyżej są aliasami do funkcji bez \[Bq]x\[rq] (np. \fBgetutxent\fP jest
aliasem \fBgetutent\fP()).
.SH UWAGI
.SS "Uwagi dla glibc"
Powyższe funkcje nie są bezpieczne dla wątków. glibc dodaje wersje
współbieżne:
.PP
.nf
\fB#include <utmp.h>\fP
.PP
\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
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.PP
\fBgetutent_r\fP(), \fBgetutid_r\fP(), \fBgetutline_r\fP():
.nf
    _GNU_SOURCE
        || /* Od glibc 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */    _SVID_SOURCE || _BSD_SOURCE
.fi
.PP
Te funkcje są rozszerzeniami GNU, analogicznymi do funkcji o tych samych
nazwach, ale bez przyrostka \[Bq]_r\[rq]. Parametr \fIubuf\fP określa miejsce,
w którym te funkcje powinny zapisać wynik. Jeśli zakończą się powodzeniem,
to zwracają 0, a wskaźnik do wyniku jest zapisywany w \fI*ubufp\fP. W razie
błędu funkcje zwracają \-1. Funkcje te nie mają swoich odpowiedników utmpx
(POSIX.1 ich nie zawiera).
.SH PRZYKŁADY
Następujący przykład dodaje i usuwa rekord utmp, przy założeniu, że zostanie
uruchomiony z pseudoterminala. Użycie w rzeczywistej aplikacji wymagałoby
sprawdzenia wartości zwracanych przez \fBgetpwuid\fP(3)  i \fBttyname\fP(3).
.PP
.\" 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 przed dodaniem wpisu:;who");

    entry.ut_type = USER_PROCESS;
    entry.ut_pid = getpid();
    strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/"));
    /* poprawne tylko dla pseudoterm. nazwanych /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 po dodaniu wpisu:;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 po usunięciu wpisu:;who");

    endutent();
    exit(EXIT_SUCCESS);
}
.EE
.\" SRC END
.SH "ZOBACZ TAKŻE"
\fBgetutmp\fP(3), \fButmp\fP(5)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
