getutline

GETUTENT(3)             PodrÄcznik programisty Linuksa             GETUTENT(3)



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(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
       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

ATRYBUTY
       Informacje o pojÄciach używanych w tym rozdziale można znaleÅºÄ w
       podrÄczniku attributes(7).

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

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

       #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
           || /* od glibc 2.19: */ _DEFAULT_SOURCE
           || /* glibc w wersji <= 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Å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 4.07 projektu Linux
       man-pages. Opis projektu, informacje dotyczÄce zgÅaszania bÅÄdów oraz
       najnowszÄ wersjÄ oryginaÅu można znaleÅºÄ pod adresem
       https://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Ä  4.07 oryginaÅu.



                                  2016-03-15                       GETUTENT(3)