//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;
}
程序2:
#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;
}
/var/run/utmp是一个二进制文件,记录当前登录系统的用户信息。可用who命令显示当中的内容。如:
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