实现mywho

理解who

man who查看who命令

查看utmp属性

#include	<stdio.h>
#include    <stdlib.h>
#include	<utmp.h>
#include	<fcntl.h>
#include	<unistd.h>
#include	<time.h>
#include	<string.h>

#define	SHOWHOST	

void showtime(long timeval)
{
        struct tm *cp;
        cp = gmtime(&timeval);
        printf("    ");
        printf("%d-%d-%d %d:%d ",cp->tm_year+1900,cp->tm_mon+1,cp->tm_mday,(cp->tm_hour+8)%24,cp->tm_min);
}

int show_info( struct utmp *utbufp )
{
	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");				

	return 0;
}

int main()
{
	struct utmp	 current_record;	
	int		utmpfd;		
	int		reclen = sizeof(current_record);

	if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){
		perror( UTMP_FILE );	
		exit(1);
	}
	while ( read(utmpfd, &current_record, reclen) == reclen )
		show_info(&current_record);
	close(utmpfd);
	return 0;			
}


为了使时间格式与系统中的who一致,在showtime函数中建议调用gmtime

gmtime是把日期和时间转换为格林威治(GMT)时间的函数。将参数time 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回

posted @ 2022-10-16 16:28  20201324徐源  阅读(24)  评论(0编辑  收藏  举报