Provided by:
manpages-pl-dev_20060617-3_all 
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)