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 [路径/源文件] [路径/目的文件](默认当前目录)
  • 代码
    886473-20161204190637162-1721088989.png
  • 函数帮助文档查看
    886473-20161204190657006-1924603196.jpg
  • 运行结果
    886473-20161204190709615-1215877832.png
echostate.c
  • 代码
    886473-20161204191233006-1961059608.jpg
  • 函数帮助文档
  • tcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios结构体中
    886473-20161204191245240-106583261.png
  • 打印错误信息
    886473-20161204191258896-1065937561.png
  • 显示输入字符,值为0000010
    886473-20161204191337834-1184463609.jpg
  • 本地模式标志,控制终端编辑功能
    886473-20161204191347162-1553992659.png
  • 运行结果
    886473-20161204191359881-203274673.png
setecho.c
  • 功能:设置echo的状态,用来改变输入指令是否可见。输入y(或是以y开头的一串字符),命令可见;否则(即输入不以y开头的字符),命令不可见

  • 代码
    886473-20161204191620021-1305953546.png
  • 运行结果
    886473-20161204191632490-174861957.png

fileinfo.c
  • 功能:查看文件信息

  • 代码
    886473-20161204191855099-1196594736.png

  • 查看帮助文档
    886473-20161204191910177-500053912.png
  • st_nlink 连到该文件的硬链接数目,刚建立的文件值为1
    886473-20161204191928615-1040771814.png
  • st_uid 用户ID
    886473-20161204191956396-2090877143.png
  • st_gid 组ID
    886473-20161204192019568-1062625496.jpg
  • st_size 文件字节数
    886473-20161204192032599-1654310132.png
  • st_mtime 最后一次修改时间
    886473-20161204192043677-870396015.jpg
  • 运行结果
    886473-20161204192054068-501516363.png

filesize.c
  • 功能:查看文件大小

  • 代码
    886473-20161204192330615-446653138.jpg
  • 运行结果
    886473-20161204192343693-118145538.png

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

  • 代码
    886473-20161204192501302-1686952987.png
  • 运行结果
    886473-20161204192518990-869661256.png

ls2.c
  • 功能:显示指定目录下的文件详细信息
  • 运行结果
    886473-20161204192628412-1880876177.png
spwd.c
  • 功能:显示当前目录路径

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

  • main函数:主函数
    886473-20161204193105631-1105816252.png
  • printpathto函数:打印路径
    886473-20161204193137412-341041315.png
  • inum_to_name函数:将长整型的索引信息转化为字符串的形式
    886473-20161204193157865-867175805.png
  • get_inode函数:取某个文件的索引信息(进入点)
    886473-20161204193213662-1586826785.png

  • 运行结果
    886473-20161204193233646-811350090.png

testioctl.c
  • 功能:查看窗体大小信息
  • 代码
    886473-20161204193401427-924400872.png
    886473-20161204193117834-1461396148.png
  • isatty:判断文件描述词是否是为终端机,如果参数所代表的文件描述词为一终端机则返回1,否则返回0。
    886473-20161204193412006-1452505475.png
  • ioctl:是设备驱动程序中对设备的I/O通道进行管理的函数,其中d是用户程序打开设备时使用open函数返回的文件标示符,request是用户程序对设备的控制命令
    886473-20161204193428552-700441115.png
  • 运行结果
    886473-20161204193444287-945635563.png
who1.c
  • 功能:从UTMP_FILE文件中读取系统中用户信息

  • 运行结果
    886473-20161204193454771-2074749921.png

本周代码托管截图

886473-20161204195634802-302558737.png

感悟

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

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周50/501/120/20
第二周50/1001/230/50
第三周100/2001/320/70
第四周0/2000/320/90
第五周50/2501/420/110
第六周50/3001/520/130
第七周0/3001/620/150
第八周0/3001/720/170
第九周100/4002/920/190
第十周0/4001/1020/210

参考资料

转载于:https://www.cnblogs.com/jdy1453/p/6082170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值