Provided by: manpages-pl-dev_4.18.1-1_all bug

NAZWA

       getutent,  getutid,  getutline, pututline, setutent, endutent, utmpname - dostęp do wpisów
       pliku utmp

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

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

OPIS

       New applications should use the POSIX.1-specified "utmpx" versions of these functions; see
       STANDARDS.

       utmpname()  ustawia  nazwę  pliku  w  formacie  utmp, który będzie używany przez pozostałe
       funkcje utmp. Jeżeli nie użyto utmpname() przed wywołaniem innych funkcji, to używają  one
       domyślnej nazwy _PATH_UTMP, zdefiniowanej w <paths.h>.

       setutent()  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.

       endutent() zamyka plik utmp. Powinna być wywołana, gdy program już zakończył używanie tego
       pliku przy pomocy innych funkcji.

       getutent()  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
       utmp(5).

       getutid()  przeszukuje  plik  w  przód,  zaczynając  od bieżącej pozycji, biorąc pod uwagę
       parametr ut. Jeżeli  ut->ut_type jest jednym z RUN_LVL, BOOT_TIME, NEW_TIME lub  OLD_TIME,
       to  getutid()  wyszuka pierwszy rekord, którego pole ut_type odpowiada ut->ut_type. Jeżeli
       ut->ut_type jest jednym z INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS lub  DEAD_PROCESS,  to
       getutid() wyszuka pierwszy wpis, którego pole ut_id  pasuje do ut->ut_id.

       getutline()  przeszukuje  plik  utmp  w  przód,  zaczynając  od  bieżącej pozycji w pliku.
       Sprawdza wpisy, których ut_type  jest  równe  USER_PROCESS  lub  LOGIN_PROCESS,  i  zwraca
       pierwszy z nich, którego pole ut_line odpowiada ut->ut_line.

       pututline() zapisuje strukturę ut, której typem jest utmp, do pliku utmp. Używa getutid(),
       aby znaleźć odpowiednie miejsce do dodania nowego  rekordu.  Jeśli  go  nie  znajdzie,  to
       pututline() doda nowy wpis na końcu pliku.

WARTOŚĆ ZWRACANA

       Funkcje  getutent(),  getutid()  i  getutline()  zwracają  wskaźnik  do struct utmp, jeśli
       zakończą się powodzeniem, lub NULL w razie wystąpienia błędu. struct utmp jest zaalokowana
       w statycznej przestrzeni danych i może zostać nadpisana przez kolejne wywołania funkcji.

       Funkcja  pututline()  zwraca  ut,  jeśli  zakończy  się  powodzeniem,  lub  NULL  w  razie
       wystąpienia błędu.

       utmpname() zwraca 0, jeśli zachowano nową nazwę, lub -1 w przypadku błędu.

       On failure, these functions errno set to indicate the error.

BŁĘDY

       ENOMEM Brak pamięci.

       ESRCH  Nie znaleziono rekordu.

       Funkcje setutent(), pututline() i getut*() mogą także zwrócić błędy opisane w open(2).

PLIKI

       /var/run/utmp
              baza danych obecnie zalogowanych użytkowników

       /var/log/wtmp
              baza danych poprzednich logowań użytkowników

ATRYBUTY

       Informacje  o  pojęciach  używanych  w  tym  rozdziale   można   znaleźć   w   podręczniku
       attributes(7).

       ┌────────────────────────┬────────────────────────┬───────────────────────────────────────┐
       │InterfejsAtrybutWartość                               │
       ├────────────────────────┼────────────────────────┼───────────────────────────────────────┤
       │getutent()              │ Bezpieczeństwo wątkowe │ MT-Unsafe init race:utent             │
       │                        │                        │ race:utentbuf sig:ALRM timer          │
       ├────────────────────────┼────────────────────────┼───────────────────────────────────────┤
       │getutid(), getutline()  │ Bezpieczeństwo wątkowe │ MT-Unsafe init race:utent sig:ALRM    │
       │                        │                        │ timer                                 │
       ├────────────────────────┼────────────────────────┼───────────────────────────────────────┤
       │pututline()             │ Bezpieczeństwo wątkowe │ MT-Unsafe race:utent sig:ALRM timer   │
       ├────────────────────────┼────────────────────────┼───────────────────────────────────────┤
       │setutent(), endutent(), │ Bezpieczeństwo wątkowe │ MT-Unsafe race:utent                  │
       │utmpname()              │                        │                                       │
       └────────────────────────┴────────────────────────┴───────────────────────────────────────┘
       W powyższej tabeli, utent w race:utent oznacza, że  jeśli  któraś  z  funkcji  setutent(),
       getutent(),  getutid(),  getutline(),  pututline(), utmpname() lub endutent() jest używana
       równolegle w różnych wątkach programu, może nastąpić sytuacja wyścigu danych.

STANDARDY

       XPG2, SVr4.

       W dokumentacji XPG2 i SVID2 funkcja  pututline()  zwraca  void,  i  to  jest  to,  co  ona
       rzeczywiście   zwraca  na  wielu  systemach  (AIX,  HPUX).  HPUX  wprowadza  nową  funkcję
       _pututline() o prototypie podanym powyżej dla pututline().

       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ą

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

       Powyższe funkcje są dostarczane przez glibc i wykonują dokładnie te same zadania,  co  ich
       odpowiedniki bez przyrostka "x", tyle że używają struktury struct utmpx, zdefiniowanej pod
       Linuksem dokładnie tak samo jak struct utmp. glibc dostarcza  także  utmpxname(),  chociaż
       POSIX.1 nie zawiera tej funkcji.

       Na niektórych systemach struktura utmpx jest rozszerzeniem struktury utmp o dodatkowe pola
       i o większe wersje istniejących pól. Utrzymywane są tam  równoległe wersje plików,  często
       jako /var/*/utmpx oraz /var/*/wtmpx.

       Z  drugiej strony linuksowe glibc nie używa pliku utmpx, ponieważ jego struktura utmp jest
       już wystarczająco duża. Funkcje "x" opisane powyżej są aliasami do funkcji  bez  "x"  (np.
       getutxent jest aliasem getutent()).

UWAGI

   Uwagi dla glibc
       The above functions are not thread-safe.  glibc adds reentrant versions

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

       Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

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

       Te  funkcje są rozszerzeniami GNU, analogicznymi do funkcji o tych samych nazwach, ale bez
       przyrostka "_r". Parametr ubuf 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
       *ubufp. W razie błędu funkcje zwracają -1. Funkcje te nie mają swoich odpowiedników  utmpx
       (POSIX.1 ich nie zawiera).

PRZYKŁADY

       Następujący  przykład  dodaje i usuwa rekord utmp, przy założeniu, że zostanie uruchomiony
       z  pseudoterminalu.  Użycie  w  rzeczywistej  aplikacji  wymagałoby  sprawdzenia  wartości
       zwracanych przez getpwuid(3)  i ttyname(3).

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

ZOBACZ TAKŻE

       getutmp(3), utmp(5)

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej  strony  podręcznika  są:  Robert  Luberda
       <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe  informacje  o  warunkach  licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub  nowszej.  Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres listy dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.