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

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

教材学习内容总结

操作系统:

  • (1)硬件相关(管家婆)
    通过三个抽象实现概念完成此功能
    文件:对I/O系统进行了抽象
    虚存:对主存和I/O系统进行了抽象
    进程:对CPU、主存和I/O系统进行了抽象

  • (2)应用无关(服务生)
    通过三个服务完成此概念
    GUI:会用鼠标即keyi使用操作系统
    Shell:要记忆系统命令,更多通过键盘使用操作系统
    系统调用:可以创建自己的工具让大家更好的使用操作系统,可以有三种方法使用系统调用
    通过软中断指令int 0x80来陷入内核
    使用syscall直接调用
    通过glibc使用API调用

Makefile的编码

target ... : prerequisites ...  

            command   

target:也就是一个目标文件,可以是Object File也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites:就是,要生成那个target所需要的文件或是目标。
command:也就是make需要执行的命令。(任意的Shell命令)

Linux中学习Linxu系统编程的方法:

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

编程要点

  • 排序:文件名读入数组,qsort()排序

  • 分栏:文件名读入数组,计算列宽和行数

  • .和..:加入-a选项,没有-a不显示隐藏文件

  • -l:功能不同,单独实现

  • 系统相关调用
    st_mode:文件类型和许可权限
    st_uid:用户所有者的ID
    st_gid:所属组的ID
    st_size:所占的字节数
    st_nlink:文件链接数
    st_mtime:文件最后修改时间
    st_atime:文件最后访问时间
    st_ctime:文件属性最后改变时间

  • 模式转换为字符
    二进制掩码可以三位一组用八进制表示,原因:权限读写执行时三位一组的

  • 将用户ID转换成用户名
    cat /etc/passwd命令查看用户列表,再利用strtok函数解决或者使用getpwuid函数

  • 组ID转化为组名
    相关文件/etc/group

代码调试中的问题和解决过程

虚拟机崩了,还没修好,看的别人的调试~

(代码实践补充)

cp1.c

  • 功能:复制文件或目录
  • 用法:./cp1 [路径/源文件] [路径/目的文件](默认当前目录)
  • 代码
  • 函数帮助文档查看
  • 运行结果

echostate.c

  • 代码
  • 函数帮助文档
  • tcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios结构体中
  • 打印错误信息
  • 显示输入字符,值为0000010
  • 本地模式标志,控制终端编辑功能
  • 运行结果

setecho.c

  • 功能:设置echo的状态,用来改变输入指令是否可见。输入y(或是以y开头的一串字符),命令可见;否则(即输入不以y开头的字符),命令不可见

  • 代码

  • 运行结果

fileinfo.c

  • 功能:查看文件信息

  • 代码

  • 查看帮助文档

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

  • st_uid 用户ID

  • st_gid 组ID

  • st_size 文件字节数

  • st_mtime 最后一次修改时间

  • 运行结果

filesize.c

  • 功能:查看文件大小

  • 代码

  • 运行结果

ls1.c

  • 功能:显示指定目录下的所有文件

  • 代码

  • 运行结果

ls2.c

  • 功能:显示指定目录下的文件详细信息
  • 运行结果

spwd.c

  • 功能:显示当前目录路径

  • 分析
    代码由4个函数组成,分别是:
    main函数:主函数
    get_inode函数:取某个文件的索引信息(进入点)
    printpathto函数:打印路径
    inum_to_name函数:将长整型的索引信息转化为字符串的形式

  • main函数:主函数

  • printpathto函数:打印路径

  • inum_to_name函数:将长整型的索引信息转化为字符串的形式

  • get_inode函数:取某个文件的索引信息(进入点)

  • 运行结果

testioctl.c

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

  • isatty:判断文件描述词是否是为终端机,如果参数所代表的文件描述词为一终端机则返回1,否则返回0。
  • ioctl:是设备驱动程序中对设备的I/O通道进行管理的函数,其中d是用户程序打开设备时使用open函数返回的文件标示符,request是用户程序对设备的控制命令
  • 运行结果

who1.c

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

  • 运行结果

本周代码托管截图

感悟

本周学习进入了新的阶段,之前是直接调用系统,现在开始学习如何解读系统中所调用的代码,以及自己编写一些类似的系统代码。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 1/1 20/20
第二周 50/100 1/2 30/50
第三周 100/200 1/3 20/70
第四周 0/200 0/3 20/90
第五周 50/250 1/4 20/110
第六周 50/300 1/5 20/130
第七周 0/300 1/6 20/150
第八周 0/300 1/7 20/170
第九周 100/400 2/9 20/190
第十周 0/400 1/10 20/210

参考资料

posted @ 2016-11-20 10:37  20145329吉东云  阅读(255)  评论(3编辑  收藏  举报