linux编程—who命令编写

来源:互联网 发布:高中信息技术编程解答 编辑:程序博客网 时间:2024/05/31 19:42

来源:
《unix/linux编程实践教程》
原理:
who通过读取存放登录用户文件的信息来实现
学习点
1.open,read,close的使用
2.Unix存储时间的方式
版本一

#include <stdio.h>#include <utmp.h>#include <fcnt1.h>#include <unistd.h>#define SHOWHOSTint  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;}show_info(struct utmp *utbufp){    printf("%-8.8s",utbufp->ut_name);    printf(" ");    printf("%-8.8s",utbufp->ut_line);    printf(" ");    printf("%10ld",utbufp->ut_time);    printf(" ");    #ifdef SHOWHOST        printf("(%s)",utbufp ->ut_host);    #endif        printf("\n");}

版本二

#include <stdio.h>#include <utmp.h>#include <fcntl.h>#include <unistd.h>#include <time.h>#define SHOWHOSTvoid showtime(long);void show_info(struct utmp *utbufp);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;}show_info(struct utmp *utbufp){        if (utbufp->ut_type != USER_PROCESS)        {            return;        }    printf("%-8.8s",utbufp->ut_name);    printf(" ");    printf("%-8.8s",utbufp->ut_line);    printf(" ");    showtime(utbufp->ut_time);    #ifdef SHOWHOST    if (utbufp->ut_host[0]!='\0')    {        printf("(%s)",utbufp ->ut_host);    }    #endif        printf("\n");}void showtime(long timeval){    char *cp;    cp = ctime(&timeval);    printf("%12.12s", cp+4);}

运行截图:
这里写图片描述

0 0
原创粉丝点击