zoukankan      html  css  js  c++  java
  • 20145215《信息安全系统设计基础》第十周学习总结

    20145215《信息安全系统设计基础》第十周学习总结

    教材学习内容总结

    视频学习内容总结

    • ls -l可以显示当前目录下目录或文件的详细属性信息

    • ls最主要的功能是列出目录内容,显示文件信息

    • 编写ls三大问题

      1. 如何列出目录内容
      2. 如何读取文件属性
      3. 如何判断目录名与文件名
    • 目录文件永远不会为空,每个目录至少包含两个特殊项...,其中.表示当前目录,..表示上一级目录。

    • 相关系统调用:

      • man -k:将列出整个man page中和“所查找单词”相关的内容,是一种模糊查找。
      • grep -nr XXX /usr/include:查找宏定义,类型定义。

    实践部分

    cp1.c

    • 功能:复制文件或目录

    • 用法:./cp1 [路径/源文件] [路径/目的文件](默认当前目录)

    • 运行效果:

    • 查看cp命令的帮助文档:

    echostate.c

    • 功能:查看在命令行中输入命令时是否可见,可见返回1,否则返回0

      • echo is on:命令可见
      • echo is off:命令不可见
    • 运行效果:

    • 研究代码的过程中,查看了其中几个函数的帮助文档:

    • tcgetattrtcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios结构体中

    • tcsetattrtcsetattr函数tcsetattr函数用于设置终端参数。

    • perror:打印错误信息

    • 此外,为了更好的理解函数返回值的过程,我用grep命令查看了其中的几个宏变量:

    • ECHO:显示输入字符,值为0000010

    • c_lflag:本地模式标志,控制终端编辑功能

    setecho.c

    • 功能:设置echo的状态,用来改变输入指令是否可见。

      • 输入y(或是以y开头的一串字符),命令可见
      • 否则(即输入不以y开头的字符),命令不可见
    • 运行效果:

    fileinfo.c

    • 功能:查看文件信息

    • 运行效果:

    • 查看stat函数的帮助文档:

    • 各宏变量的意义:

    • mode:st_mode 文件的类型和存取的权限

    • links:st_nlink 连到该文件的硬链接数目,刚建立的文件值为1

    • user:st_uid 用户ID

    • group:st_gid 组ID

    • size:st_size 文件字节数

    • modtime:st_mtime 最后一次修改时间

    filesize.c

    • 功能:查看文件大小(老师给的代码中指定了查找/etc/passwd文件的大小,所以不管后面输入什么文件名,程序都只查找etc/passwd

    • 初始运行效果:

    • 为了实现用户想查看的指定文件大小, 对代码进行如下修改:

    #include <stdio.h>
    #include <sys/stat.h>
    #include <stdlib.h>    //exit() 
    int main(int argc, char * argv[])
    {
    struct stat infobuf;   
    char *filename;         
    
    if (argc != 2) { 
        printf("Please input filename
    "); 
        exit(-1); 
        } 
    filename = argv[1];
    if ( stat(filename, &infobuf) == -1 )
        perror(filename);
    else
        printf(" The size of %s is %d
    ",filename, infobuf.st_size );
    }
    
    • 此时编译运行便能得到我们想要的结果:

    ls1.c

    • 功能:显示指定目录下的所有文件(默认为当前目录)
    • 运行效果:

    ls2.c

    • 功能:显示指定目录下的文件详细信息(默认为当前目录)
    • 运行效果:

    spwd.c

    • 功能:显示当前目录路径
    • 初始运行效果:

    分析

    • 代码由4个函数组成,分别是:

      • main函数:主函数
      • get_inode函数:取某个文件的索引信息(进入点)
      • printpathto函数:打印路径
      • inum_to_name函数:将长整型的索引信息转化为字符串的形式
    • 执行指令查看stat:man 2 stat

    • 文件的索引信息,“number”告诉我们它是一个数字表示,而不是一个确切的路径,这就好比我们有时候用文件描述符来操作文件,而不用字符数组(文件名)来操作。

    • 整个代码概括来讲,就是:

      • 找到本目录的i-节点
      • 进入父目录,找到i-节点对应的文件名
      • 循环以上过程,直到到达根目录
    • 需要注意的是,chdir()这个系统调用,是改变当前程序的工作目录,不是改变bash的工作目录,这是不一样的。还有,改动是立即生效的,在需要用到工作目录(其实就是一个路径名)的时候,程序就会读取某个地方的信息,当调用chdir()时,直接把这个信息更改,后续的读取到的工作目录就会改变。

    • 当我尝试着用man -k指令搜索有关于工作目录的函数时,找到了一个非常强大的函数:

    • 函数getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。

    • 有了这个函数,代码的编写也非常简单:

    #include "unistd.h"
    #include "stdio.h"
    int main(void)
    {
        printf("%s
    ",getcwd(NULL,0));
        return 0;
    }
    
    • 最终运行效果和pwd指令一模一样:

    testioctl.c

    • 功能:查看窗体大小信息

    • 运行效果:

    • 查看isattyioctl函数的帮助文档:

    • isatty:判断文件描述词是否是为终端机,如果参数所代表的文件描述词为一终端机则返回1,否则返回0。

    • ioctl:是设备驱动程序中对设备的I/O通道进行管理的函数,其中d是用户程序打开设备时使用open函数返回的文件标示符,request是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和request的意义相关

    who1.c

    • 功能:从UTMP_FILE文件中读取系统中用户信息
    • 运行效果:

    本周代码托管截图

    • 代码托管链接:click here
    • 托管截图及代码行数统计:

    心得体会

    经过本周的学习之后,对系统调用的重要性有了更深的认识。实际上,很多已经被我们习以为常的C语言标准函数,在Linux平台上的实现都是靠系统调用完成的,所以如果想对系统底层的原理作深入的了解,掌握各种系统调用是初步的要求。此外,在平常的编程中,很多情况下,系统调用是实现想法的简洁有效的途径,所以有可能的话我们应该尽量多掌握一些系统调用,这会对我们的程序设计过程带来意想不到的帮助。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/2 25/45 学习了几个Linux核心命令
    第二周 55/55 2/4 27/72 学会了vim,gcc以及gdb的基本操作
    第三周 148/203 1/5 23/95 对信息的表示和处理有更深入的理解
    第五周 72/275 1/6 25/120 对汇编语言有了更深的理解
    第六周 56/331 2/8 30/150 安装了Y86模拟器
    第七周 61/392 1/9 22/172 理解了局部性原理和缓存思想在存储层次结构中的应用
    第八周 0/392 1/10 20/192 复习前几章内容
    第九周 132/524 2/12 24/216 了解了Linux操作系统提供的基本I/O服务
    第十周 420/524 2/14 20/236 对常用指令的代码进行了分析调试,加深了理解

    参考资料

  • 相关阅读:
    脊椎有问题的7个信号
    SOHO兼职 SOHO一族 世界创业实验室
    MSTParser句法工具使用方法
    BinaryFormatter序列化实例
    C#中文件流,网络流,缓冲流等流的概念理解
    探讨和比较Java和_NET的序列化_Serialization_框架
    .net中对象序列化技术浅谈
    史上最详细最容易理解的HMM文章
    成功者足迹的综合总结:网络创业14条不外传的绝招
    此情何时休
  • 原文地址:https://www.cnblogs.com/lxm20145215----/p/6082455.html
Copyright © 2011-2022 走看看