您的位置:首页 > 运维架构 > Linux

Linux实现who

2015-07-06 00:53 399 查看
$ 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.csdn.net/xiamo20149

参考《Unix/Linux编程实践教程》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux C