2018-2019-1 20165221 《信息安全系统设计》第六周学习总结

2018-2019-1 20165221 《信息安全系统设计》第六周学习总结

知识点总结

理论知识

  • 操作系统完成的「硬件相关、应用无关」的工作比喻成两个角色:
管家婆
服务生
  • 操作系统通过三抽象概念完成了「管家婆」的功能:

    header 1 | header 2
    ---|---
    抽象一| 通过「文件」对I/O设备进行了抽象
    抽象二| 通过「虚存」对主存和I/O设备进行了抽象
    抽象三| 通过「进程」对CPU、主存和I/O设备进行了抽象

who命令如何使用

  • 可以查看当前登录的账户,终端和近期的登陆时间
  • 键入man 1 who可以具体查看该命令的用法
  • who命令的其他几种形式:

    header 1 | header 2
    ---|---
    形式1 | ```whoami```
    形式2| ```who am i```
    形式3| ```who mom likes```
  • who的帮助文档提供了重要的信息:
    If FILE is no specified, use /var/run/utmp,/var/log/wtmp as FILE is common.
  • 下面进行具体查看和捕捉


    由此证实关于utmp是一条记录,一条记录组成的文件的猜想。
  • 找到实现who命令的代码:

    如何自己编写who命令

  • 具体代码:
#include    <stdio.h>
#include    <stdlib.h>
#include    <utmp.h>
#include    <fcntl.h>
#include    <unistd.h>

int 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("\n");               
    return 0;
}

int main()
{
    struct utmp  current_record;    
    int     utmpfd;     
    int     reclen = sizeof(current_record);
    //打开utmp 文件
    if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){
        perror( UTMP_FILE );    
        exit(1);
    }

    //读取utmp中的每一条记录
    while ( read(utmpfd, &current_record, reclen) == reclen )
        //显示记录中的相关信息
        show_info(&current_record);
 
    //关闭utmp文件
    close(utmpfd);
    return 0;           
}

学习linux系统编程的方法

  • 仔细研究manpages
  • 问题驱动,使用man -k key1|grep key2|...在manpages中搜索你要的内容
  • 阅读.h文件: 可以通过grep -nr XXXX /usr/incldue查找相关的宏定义,结构体定义,类型定义等
  • 解决一个问题要多个系统调用,可以参考manpagesSEE ALSO部分来得到相关系统调用的信息

  • 文本文件易读取,占位置;二进制文件灵活易存储,读取难

    参考资料

  • 别出心裁的Linux系统调用学习法
  • 文本文件与二进制文件区别
  • linux下如何编写who命令

猜你喜欢

转载自www.cnblogs.com/0630tx/p/9904343.html