Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       getutent, getutid, getutline, pututline, setutent, endutent, utmpname -
       dostp do wpisow pliku utmp

SK/LADNIA

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

       void utmpname(const char *file);

OPIS

       utmpname() ustawia nazw pliku w formacie utmp, ktory bdzie uywany przez
       pozostale  funkcje  utmp.  Jeeli  nie  uyto utmpname() przed wywolaniem
       innych funkcji, to uywaj one domylnej nazwy _PATH_UTMP, zdefiniowanej w
       <paths.h>.

       setutent()  przesuwa  wskanik  pliku  z powrotem na pocztek pliku utmp.
       Funkcja ta powinna zosta  wywolana  przed  wywolaniem  ktorejkolwiek  z
       pozostalych funkcji.

       endutent()  zamyka  plik  utmp.  Powinna  by  wywolana,  gdy program ju
       zakoczyl uywanie tego pliku przy pomocy innych funkcji.

       getutent() odczytuje lini z pliku utmp, zaczynajc od biecej  pozycji  w
       tym pliku. Zwraca wskanik do struktury zawierajcej pola linii.

       getutid()  przeszukuje plik w przod, zaczynajc od biecej pozycji, biorc
       poduwag  parametr  ut.  Jeeli  ut->ut_type  jest  jednym   z   RUN_LVL,
       BOOT_TIME,  NEW_TIME  lub  OLD_TIME,  to   getutid()  wyszuka  pierwszy
       rekord, ktorego pole ut_type odpowiada ut->ut_type.  Jeeli  ut->ut_type
       jednym z INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS lub DEAD_PROCESS, to
       getutid()  wyszuka  pierwszy  wpis,  ktorego  pole  ut_id   pasuje   do
       ut->ut_id.

       getutline()  przeszukuje plik utmp w przod, zaczynajc od biecej pozycji
       w pliku. Sprawdza wpisy, ktorych ut_type jest  rowne  USER_PROCESS  lub
       LOGIN_PROCESS, i zwraca pierwszy z nich, ktorego pole ut_line odpowiada
       ut->ut_line.

       pututline() zapisuje struktur ut do pliku  utmp.  Uywa  getutid(),  aby
       znale  odpowiednie  miejsce  do  dodania  nowego  rekordu.  Jeli go nie
       znajdzie, to pututline() doda nowy wpis na kocu pliku.

WARTO ZWRACANA

       Funkcje  getutent(),  getutid(),  getutline()  i  pututline()   zwracaj
       wskanik  do  struct  utmp, jeli zakocz si powodzeniem, lub NULL w razie
       wystpienia  bldu.  Ta  struct  utmp  jest  zaalokowana   w   statycznej
       przestrzeni  danych  i  moe  zosta  nadpisana  przez  kolejne wywolania
       funkcji.

WERSJE BEZPIECZNE DLA WTK'OW

       Powysze funkcje  nie  s  bezpieczne  dla  wtkow.  Glibc  dodaje  wersje
       wielobiene:

       #define _GNU_SOURCE /* lub _SVID_SOURCE, lub _BSD_SOURCE */
       #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  okrela  miejsce,  do
       ktorego te funkcje powinny zwroci wynik. Jeli zakocz si powodzeniem, to
       zwracaj 0, a wskanik do wyniku jest zapisywany w *ubufp. W  razie  bldu
       funkcje zwracaj -1.

PRZYK/LAD

       Nastpujcy  przyklad  dodaje  i  usuwa  rekord  utmp,  przy  zaloeniu, e
       zostanie uruchomiony  z pseudoterminalu. Uycie w rzeczywistej aplikacji
       wymagaloby   sprawdzenia   wartoci   zwracanych   przez  getpwuid()   i
       ttyname().

       #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(0)+strlen("/dev/"));
         /* poprawne tylko dla terminali nazwanych /dev/tty[pqr][0-9a-z] */
         strcpy(entry.ut_id,ttyname(0)+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 usuniciu wpisu:;who");

         endutent();
         return 0;
       }

PLIKI

       /var/run/utmp  baza danych obecnie zalogowanych uytkownikow
       /var/log/wtmp  baza danych poprzednich logowa uytkownikow

ZGODNE Z

       XPG 2, SVID 2, Linux FSSTND 1.2

       W dokumentacji XPG2 i SVID2 funkcja pututline() zwraca void, i to  jest
       to,  co  ona  rzeczywicie  zwraca  na wielu systemach (AIX, HPUX, Linux
       libc5). HPUX wprowadza now funkcj  _pututline()  o  prototypie  podanym
       powyej dla pututline() (funkcja ta znajduje si rownie w libc5 Linuksa).

       Wszystkie  te funkcje s przestarzale na systemach nielinuksowych. POSIX
       1003.1-2001, naladujc XPG4.2, nie zawiera adnej  z  tych  funkcji,  ale
       zamiast nich uywa

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

       Struktura  utmpx jest rozszerzeniem struktury utmp o dodatkowe pola i o
       wiksze  wersje  istniejcych  pol.  Odpowiadajcymi   plikami   s   czsto
       /var/*/utmpx oraz /var/*/wtmpx.

       Z drugiej strony linuksowe glibc nie uywa utmpx, poniewa jego struktura
       utmp jest ju wystarczjco dua. Funkcje getutxent itp. s aliasami funkcji
       getutent itp.

ZOBACZ TAKE

       utmp(5)

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.

                                  1996-07-25                       GETUTENT(3)