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 |