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


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

    知识点总结

    课本知识:

    • I/O:在主存和外部设备(例如磁盘存储器、终端和网络)之间复制数据的过程。

    • 输入操作是从I/O设备复制数据到主存,而输出操作是从主存复制数据到 I/O设备。
      所有I/O设备都被模型化为文件。

    • Linux shell创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)标准输出(描述符为1)标准错误(描述符为2)

    • 每个Linux文件都有一个类型来表明它在系统中的角色:
      1、普通文件包含任意数据;2、目录是包含一组链接的文件;3、套接字是用来与另一个进程进行跨网络通信的文件;

    • 对内核而言,文本文件和二进制文件没有任何区别。区别是相对应用程序而言的

    • 在某些情况下,read和write传送的字节比应用程序要求的要少。这些不足值不表示有错误。出现这样情况的原因有:

      1、读时遇到EOF2、从终端读文本行3、读和写网络套接字

    • st_size成员包含了文件的字节数大小。st_mode成员则编码了文件访问许可位。

    • 内核用三个相关的数据结构来表示打开的文件:

      1.描述符表2、文件表3、v-node表

    • 典型的打开文件的内核数据结构:
      image

    博客知识:

    • 操作系统完成的「硬件相关、应用无关」的工作比喻成两个角色:

      1. 管家婆
      2. 服务生
    • 操作系统通过三抽象概念完成了「管家婆」的功能:

    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("
    ");               
        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部分来得到相关系统调用的信息

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

    参考资料

  • 相关阅读:
    JQuery Table 合并单元格-解决Bug版本
    SQLServer当数据导入平面文件
    【BZOJ1294】[SCOI2009]围豆豆Bean 射线法+状压DP+SPFA
    【BZOJ3590】[Snoi2013]Quare 状压DP
    【BZOJ4036】[HAOI2015]按位或 FWT
    【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分
    【CF603E】Pastoral Oddities cdq分治+并查集
    【CF891E】Lust 生成函数
    【CF618G】Combining Slimes 概率+矩阵乘法
    【CF633H】Fibonacci-ish II 莫队+线段树
  • 原文地址:https://www.cnblogs.com/0630tx/p/9904343.html
Copyright © 2020-2023  润新知