$ vi who01.c
新建who01.c
who是用来显示当前用户的用户名、终端类型、登录时间等信息的。
/**
* who
* open, read UTMP file, and show results
*/
#include<stdio.h>
#include<utmp.h>
#include<fcntl.h>
#include<unistd.h>
#include<time.h>
//#define SHOWHOST // include remote machine on output
void show_info( struct utmp * utbufp );
int main(void)
{
struct utmp current_record; // read information into hear
int utmpfd; // read from this descriptor
int reclen = sizeof(current_record);
if( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 )
{
perror( UTMP_FILE ); // UTMP_FILE is in utmp.h
exit(1);
}
while( read(utmpfd, ¤t_record, reclen) == reclen)
{
show_info(¤t_record);
}
close( utmpfd );
return 0; // OK
}
/**
* show_info
* displays contents of the utmp struct in human readable from
*/
void show_info(struct utmp *utbufp )
{
if(utbufp->ut_type != USER_PROCESS) // users only
return;
printf("% -8.8s", utbufp->ut_name); // the logname
printf(" "); // a space
printf("% -8.8s", utbufp->ut_line); // the tty
printf(" ");
printf("%12.12s", ctime( &(utbufp->ut_time)) + 4 ); // login time
printf(" ");
#ifdef SHOWHOST
printf("% -8.8s", utbufp->ut_line); // the host
#endif
printf("\n");
}
与系统的who输出一模一样啦!
summer个人博客主页http://blog.youkuaiyun.com/xiamo20149
参考《Unix/Linux编程实践教程》