unix/linux学习笔记:chapter2

  1. who命令能做些什么?
    列出正在使用系统的用户的用户名,终端名,登录时间等

  2. unix增加一个命令,只要把程序的可执行文件放到/bin , /usr/bin . /usr/local/bin 其中一个目录中就行

  3. 联机帮助可以查看一个命令的用途:man who

  4. 学习unix的资料来源:
    (1)联机帮助:man 可以了解命令的功能和实现的原理,可以找到.h文件的位置
    (2)搜索联机帮助:man -k word
    (3)阅读.h文件
    (4)see also

  5. who命令是如何工作的?
    /usr/include/utmp.h文件中utmp结构用来保存登录用户信息
    who的工作原理:打开utmp –》读取记录 –》 显示记录 –》 关闭utmp

  6. 如何编写who命令?
    要做的两件事:
    (1)从文件中读取数据结构
    (2)将结构中的信息以合适的形式显示出来

7.open():打开一个文件
头文件:#include

#include<stdio.h>
#include<utmp.h>
#include<fcntl.h>
#include<unistd.h>

#define SHOWHOST

void show_info(struct utmp * utbufp)//格式化输出utmp结构
{
    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");
}
int main()
{
    struct utmp current_record;
    int utmpfd;
    int reclen=sizeof(current_record);

    if((utmpfd=open(UTMP_FILE,O_RDONLY))==-1){//  UTMP_FILE文件存放了登录信息
        perror(UTMP_FILE);
        exit(1);
    }
    while(read(utmpfd,&current_record,reclen)==reclen)//每次读取reclen字节到缓冲区
        show_info(&current_record);//调用显示函数
    close(utmpfd);
    return 0;
}

待完善:
1. 清除空白记录
2. 正确地显示时间


who2.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值