#include <stdio.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#define SHOWHOST
void showtime(long);
void show_info( struct utmp *);
int main()
{
struct utmp current_record;
int utmpfd;
int reclen = sizeof(current_record);
if( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ) // /usr/include/paths.h:#define _PATH_UTMP "/var/run/utmp" utmp文件路径
{
perror( UTMP_FILE ); //无法打开输出错误
exit(1);
}
while( read(utmpfd, ¤t_record, reclen) == reclen ) //读取utmp文件中的 所有utmp结构体到current_record
show_info(¤t_record); //打印who信息
close(utmpfd);
return 0;
}
void show_info( struct utmp *utbufp)
{
if( utbufp->ut_type != USER_PROCESS ) //过滤不是登录用户的信息 USER_PROCESS=7
return;
printf("% -8.8s", utbufp->ut_name);
printf(" ");
printf("% -8.8s", utbufp->ut_line);
printf(" ");
showtime( utbufp->ut_time );
printf(" ");
#ifdef SHOWHOST
printf("(% s)", utbufp->ut_host);
#endif
printf("\n");
}
void showtime( long timeval )
{
char *cp;
cp = ctime(&timeval);
printf("%12.12s", cp+4); //从第4个字符开始,输出12个字符
}
《UNIX/LINUX编程实践教程》实例注释chapt2 - who2
最新推荐文章于 2021-12-10 09:02:56 发布