// 1:定义一个utmp结构体。保存读到的数据。 // 2:只读方式打开 /var/run/utmp 文件。 // 3:循环调用(read) 读取数据,直到读完位置。 // 4:每次读完数据后判断是普通用户的话, // 打印登陆用户名,终端号,登陆时间 // 5:注意:打印时间的时候用ctime去转换。 // if(A.ut_type==USER_PROCESS) #include < stdio.h > #include < unistd.h > #include < utmp.h > #include < fcntl.h > #include < time.h > int main( int argc, char * argv[]){ int fd; struct utmp A; fd = open( " /var/run/utmp " ,O_RDONLY); while (read(fd, & A, sizeof (A)) != 0 ) { if (A.ut_type == USER_PROCESS) // 如果是普通用户则打印用户名、终端、和登陆时间。 printf( " %s\t%s\t%s\n " ,A.ut_user,A.ut_line,ctime( & A.ut_tv.tv_sec)); } return 0 ;}
#include < stdio.h > #include < unistd.h > #include < utmp.h > #include < fcntl.h > #include < time.h > int main( int argc, char * argv[]){ FILE * fp; struct utmp A; fp = fopen( " /var/run/utmp " , " r " ); while (fread( & A, sizeof (A), 1 ,fp)) { if (A.ut_type == USER_PROCESS) printf( " %s\t%s\t%s " ,A.ut_user,A.ut_line,ctime( & A.ut_tv.tv_sec)); } return 0 ;}
debian:/var/log# who 23:23:46 up 3:14, 3 users, load average: 0.61, 0.60, 0.45 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root :0 - 20:12 ?xdm? 33:58 1.91s x-session-manager root pts/1 :0.0 23:19 8.00s 0.28s 0.21s ssh reomte root pts/3 :0.0 22:31 0.00s 0.23s 0.00s wd