相关函数:getutent, getutid, getutline, setutent, endutent, pututline, utmpname
utmp 结构定义如下:
struct utmp{ short int ut_type; //登录类型 pid_t ut_pid; //login 进程的pid char ut_line[UT_LINESIZE]; //登录装置名, 省略了"/dev/" char ut_id[4]; //Inittab ID char ut_user[UT_NAMESIZE]; //登录账号 char ut_host[UT_HOSTSIZE]; //登录账号的远程主机名称 struxt exit_status ut_exit; //当类型为DEAD_PROCESS 时进程的结束状态 long int ut_session; //Sessioc ID struct timeval ut_tv; //时间记录 int32_t ut_addr_v6[4]; //远程主机的网络地址 char __unused[20]; //保留未使用};ut_type 有以下几种类型:EMPTY:此为空的记录.RUN_LVL:记录系统run-level 的改变BOOT_TIME:记录系统开机时间NEW_TIME:记录系统时间改变后的时间OLD_TINE:记录当改变系统时间时的时间.INIT_PROCESS:记录一个由init 衍生出来的进程.LOGIN_PROCESS:记录 login 进程.USER_PROCESS:记录一般进程.DEAD_PROCESS:记录一结束的进程.ACCOUNTING:目前尚未使用.exit_status 结构定义:struct exit_status{ short int e_termination; //进程结束状态 short int e_exit; //进程退出状态};timeval 的结构定义请参考gettimeofday()。相关常数定义如下:UT_LINESIZE 32UT_NAMESIZE 32UT_HOSTSIZE 256
范例
#include <utmp.h>main(){ struct utmp *u; while((u = getutent())) { if(u->ut_type == USER_PROCESS) printf("%d %s %s %s \n", u->ut_type, u->ut_user, u->ut_line, u->ut_host); } endutent();}