#include <utmp.h>
struct utmp *getutent(void);
struct utmp *getutid(const struct utmp *id);
struct utmp *getutline(const struct utmp *line);
struct utmp *pututline(const struct utmp *utmp);
void setutent(void);
void endutent(void);
int utmpname(const char *file);
utmp는 커널에서 관리하는 로그인테이블 관리 시스템으로 현재 로그인된 유저와 언제 로그인했는지, 어떤 터미널(tty)를 사용하고 있는지, 접속한 호스트의 IP등의 정보를 남긴다. 로그아웃 했다면 언제 했는지에 대한 정보도 저장한다.
#include <utmp.h>
struct utmp *getutent(void);
getutent(), getutid(), getutline(), pututline()를 이용하면 utmp 구조체의 포인터를 리턴한다. utmp 구조체는 다음과 같은 멤버변수를 가진다.
struct utmp
{
short ut_type; /* type of login */
pid_t ut_pid; /* pid of login process */
char ut_line[UT_LINESIZE]; /* device name of tty - "/dev/" */
char ut_id[4]; /* init id or abbrev. ttyname */
char ut_user[UT_NAMESIZE]; /* user name */
char ut_host[UT_HOSTSIZE]; /* hostname for remote login */
struct exit_status ut_exit; /* The exit status of a
process marked as DEAD_PROCESS. *
long ut_session; /* session ID, used for
struct timeval ut_tv; /* time entry was made. */
int32_t ut_addr_v6[4]; /* IP address of remote host. */
char pad[20]; /* Reserved for future use. */
};
getutent()는 utmp 파일로 부터 다음 엔트리의 값을 읽어온다. 만약 utmp 파일이 열려있지 않다면 open한다. 더이상 읽을 엔트리가 없다면 NULL을 리턴한다.
getutid()는 utmp의 현재 ut_id 와 id_ut_id 가 일치하는 것을 현재 포인트부터 엔트리를 돌면서 찾아낸다. 엔트리의 끝까지 이동했을때까지 일치하는 정보가 없다면 NULL을 리턴한다.
getutline()는 ut_line 와 line->ut_line 문자열이 일치하는 것을 찾아서 리턴힌다. 일치하는 엔트리가 없다면 NULL을 리턴한다. ut_type 이 LOGIN_PROCESS인 것에 대해서 검사한다.
setutent()를 사용하면 utmp 파일의 처음으로 이동한다.
endutent() 최근 열린 utmp 파일을 닫는다.
utmp구조체에 대한 포인터를 돌려준다. 더이상 데이터가 없다면 NULL을 되돌려준다.
에러가 발생하면 (struct utmp *)0 을 되돌려준다.
참조
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/3/getutent
'API 및 라이브러리 > C 라이브러리 함수' 카테고리의 다른 글
getusershell(3) (0) | 2009.12.19 |
---|---|
syslog, openlog(3) (0) | 2009.12.18 |
ttyname(3) (0) | 2009.04.04 |
memcpy(3) (0) | 2009.04.03 |
isatty(3) (0) | 2009.04.02 |