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)