unix/linux学习笔记:chapter2

时间:2021-07-04 20:55:18
  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