zoukankan      html  css  js  c++  java
  • 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部分来得到相关系统调用的信息

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

    参考资料

  • 相关阅读:
    P1030 求先序排列 P1305 新二叉树
    spfa
    Clairewd’s message ekmp
    Cyclic Nacklace hdu3746 kmp 最小循环节
    P1233 木棍加工 dp LIS
    P1052 过河 线性dp 路径压缩
    Best Reward 拓展kmp
    Period kmp
    Substrings kmp
    Count the string kmp
  • 原文地址:https://www.cnblogs.com/0630tx/p/9904343.html
Copyright © 2011-2022 走看看