linux编程who命令的简单实现

来源:互联网 发布:三品软件plm 编辑:程序博客网 时间:2024/04/30 09:09

Linux下的所有命令其实就是一个个可执行程序,通过man 手册可以找到who 其实是打开了文件/var/run/utmp中的文件信息

简单实现如下:

who.c
#include <stdio.h>#include <utmp.h>#include <fcntl.h>#include <unistd.h>#include <time.h>//username后半部分有换号,还需修改void show_time(time_t t){    char* p_time;    p_time = ctime(&t);    printf("%s",p_time + 4);}void show_info(struct utmp* utmp_buffer){    if(utmp_buffer->ut_type == USER_PROCESS)    {        printf("%s",utmp_buffer->ut_user);        printf("\t");        printf("%s",utmp_buffer->ut_line);        printf("\t");        show_time(utmp_buffer->ut_tv.tv_sec);        printf("(");        printf("%s",utmp_buffer->ut_host);        printf(")");        printf("\n");    }}int main(){    struct utmp current_record;    int utmpd;    int reclen;    if((utmpd = open("/var/run/utmp",O_RDONLY)) == -1)    {        perror("utmp");        exit(1);    }    reclen = sizeof(current_record);    while(read(utmpd,¤t_record,reclen) == reclen)    {        show_info(¤t_record);    }    close(utmpd);    return 0;}



0 0
原创粉丝点击