首页 > 代码库 > 20145311 《信息安全系统设计基础》第十周学习总结

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

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

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

cp

类似于cp的cp1命令,用来复制文件或目录

技术分享

技术分享

cp的关键步骤:

打开源文件
创建目标文件
把源文件读入缓冲区
把缓冲区内容写入目标文件
关闭源文件和目标文件

此外,代码中还包含了一些错误的提示,例如打开错误,创建错误,用法错误等

技术分享

技术分享

setecho & echostate

下图为设置echo为no之后键盘的输入不显示,但依然可以执行命令

技术分享

当echo为no是 echostate显示为关闭状态

技术分享

代码分析
#include <stdio.h>
#include <stdlib.h> #include <termios.h> #define oops(s,x) { perror(s); exit(x); } int main(int argc, char *argv[]) { struct termios info; if (argc == 1) //后面没有带参数的话就不做任何操作,退出 exit(0); if (tcgetattr(0,&info)==-1)//tcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios 结构体中,这里fd为0,是标准输入。这句用于读取设备属性 oops("tcgettattr", 1); if ( argv[1][0] == ‘y‘ )//如果运行命令后面的参数第一个字母是“y”,执行“设置打开提示符”的命令 info.c_lflag |= ECHO ;/*打开提示符*/ else//对其它所有的参数都执行“设置隐藏提示符”的命令 info.c_lflag &= ~ECHO ;/*隐藏提示符*/ if ( tcsetattr(0,TCSANOW,&info) == -1 )//将修改后的参数写回设备 oops("tcsetattr",2); return 0; }

fileinfo & filesize

fileinfo的功能与ls -l的功能类似,可以显示文件的具体信息

技术分享

mode:st_mode        文件的类型和存取的权限         
links:st_nlink      连到该文件的硬链接数目,刚建立的文件值为1
user:st_uid         用户ID
group:st_gid        组ID          
size:st_size        文件字节数
modtime:st_mtime    最后一次修改时间
name:               输入的文件名

下图为一些用户权限的数字表示

技术分享

filesize显示的文件的大小,但是它默认的是/etc/passwd的大小,应该是可以改路径的

技术分享

ls

感觉这两个ls的功能远不及系统级ls,代码中好像是利用dir来实现功能的

技术分享

技术分享

还是系统的ls功能多

ls -l:显示文件信息
ls -a:列出文件目录
ls -lu:最后访问时间
ls -s:以块为单位的文件大小
ls -t:按时间排序
ls -F:显示文件类型

spwd

显示当前目录,我在共享文件夹中试了一下有错误,换了个文件夹就可以了

testioctl

获得终端设备的窗口大小,两个不同的终端大小

技术分享

who

两个代码运行结果类似,都是通过读取utmp文件来显示用户信息

技术分享

本周代码托管

将源代码都放到了src文件夹中,重新git了一下

其他(感悟、思考等,可选)

本周的学习内容主要是一些系统级调用,这些代码有的感觉没有系统级调用那么强大的功能,所以还需要不断地完善

学习进度条

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 100/100 1/2 10/10
第二周 150/200 2/4 8/18
第三周 200/250 1/5 5/23
第五周 50/300 1/6 9/32
第六周 20/320 1/7 8/40
第七周 20/340 1/8 6/46
第八周 60/400 2/10 6/52
第九周 80/480 1/11 8/60
第十周 60/540 2/13 6/66

参考资料

  • 《深入理解计算机系统V2》学习指导
  • ...

 

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