Provided by: manpages-pl-dev_0.5-1_all bug

NAZWA

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

SKŁADNIA

       #include <utmp.h>

       struct utmp *getutent(void);
       struct utmp *getutid(struct utmp *ut);
       struct utmp *getutline(struct utmp *ut);

       struct utmp *pututline(struct utmp *ut);

       void setutent(void);
       void endutent(void);

       int utmpname(const char *file);

OPIS

       Nowe aplikacje powinny używać podanych w standardzie POSIX.1 wersji "utmpx" tych  funkcji,
       patrz rozdział "ZGODNE Z" poniżej.

       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.

       W razie wystąpienia błędu ustawiana jest zmienna errno aby wskazać przyczynę.

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

ZGODNE Z

       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, Linux libc5). HPUX wprowadza nową
       funkcję _pututline() o prototypie podanym powyżej dla pututline() (funkcja ta znajduje się
       również w libc5 Linuksa).

       Wszystkie te funkcje są przestarzałe na systemach nielinuksowych. POSIX.1-2001, naśladując
       SUSv1, nie zawiera żadnej z tych funkcji, ale zamiast nich używa

       #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 dotyczące biblioteki glibc
       Powyższe funkcje nie są bezpieczne dla wątków. Glibc dodaje wersje współbieżne:

       #define _GNU_SOURCE    /* lub _SVID_SOURCE, lub _BSD_SOURCE;
                                     patrz feature_test_macros(7) */
       #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);

       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ŁAD

       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 <string.h>
       #include <stdlib.h>
       #include <pwd.h>
       #include <unistd.h>
       #include <utmp.h>

       int
       main(int argc, char *argv[])
       {
           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)

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  3.52  projektu Linux man-pages. Opis
       projektu  oraz  informacje  dotyczące  zgłaszania  błędów  można   znaleźć   pod   adresem
       http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

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

       Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów  na
       stronie   http://sourceforge.net/projects/manpages-pl/.   Jest   zgodne   z  wersją   3.52
       oryginału.

                                            2013-04-19                                GETUTENT(3)