20145219 《信息安全系统设计基础》第10周学习总结
教材学习内容总结
附录A——错误处理
- Unix风格的错误处理:函数返回值包括错误代码,也包括有用的结果
- Posix风格的错误处理:返回0表示成功,返回非0表示失败;任何有用的结果都返回在通过引用传递进来的函数参数中。
- DNS风格的错误处理:函数失败时返回NULL指针,并设置全局变量h_errno
cp1.c
-
cp命令使用格式:
cp src dst
-
cp1.c
功能:复制一个文件的内容到另一个文件 -
如图,将
cp1.c
文件中的内容复制到了cpp.c
-
cp1.c
文件内容
-
cpp.c
文件内容
echostate.c
echostate.c
功能:查看在命令行中输入命令时是否可见,可见返回1,不可见返回0
fileinfo.c
-
fileinfo.c
功能:显示文件相关信息,包括如下方面:mode:st_mode 文件的类型和存取的权限 links:st_nlink 连到该文件的硬链接数目,刚建立的文件值为1 user:st_uid 用户ID group:st_gid 组ID size:st_size 文件字节数 modtime:st_mtime 最后一次修改时间 name: 输入的文件名
filesize.c
filesize.c
功能:计算etc/passwd
文件大小,结果显示文件字节数。
ls1.c
ls1.c
功能:显示当前目录下的所有文件(只显示文件名)
ls2.c
-
ls2.c
功能:显示当前目录下的所有文件详细信息,包括如下方面:st_mode 文件类型(模式、权限) st_nlink 文件链接数 st_uid 用户所有者的ID st_gid 所属组的ID st_size 所占的字节数 st_mtime 文件最后修改时间
setecho.c
-
setecho.c
功能:设置输入指令可见性:输入y(或是以y开头的一串字符):命令可见 否则(即输入不以y开头的字符):命令不可见
运行时结合运行
echostate
,可显示当前echo的状态
spwd.c
spwd.c
功能:显示当前目录的绝对路径
testioctl.c
testioctl.c
功能:计算当前终端设备的窗口大小(显示行、列数目)
who1.c
who1.c
功能:显示系统中用户的信息
who2.c
- ……经比对
who2.c
与who1.c
的代码完全相同,先开始我以为自己下载错了,后来接连问了几个同学,他们的也是这样,我想,应该是老师您上传到QQ群里的代码出错了……
视频内容
-
ls命令
-l
显示详细信息,-a
列出隐藏目录 -
man ls
查看ls的相关信息
-
列出目录内容
Linux中用目录树组织磁盘上的目录或文件
- 目录是一种特殊的文件,内容是文件和目录的名字
- 目录包含很多记录,每条记录代表一个目录或文件
- 目录文件永远不会空,至少包括.和..两项
-
man -k directory | grep read
-
man 3 readdir
-
读取文件属性
-
man -k file | grep status
-
man 2 stat
-
-
文件权限
st_mode为16位二进制整数
-
模式转化为字符:二进制掩码用八进制表示
-
sys/stat.h
中定义了S_IFREG和S_IFDIR两个判断是目录还是文件的两个掩码 -
将用户ID转换成用户名
cat /etc/passwd
命令查看用户列表
-
组ID转化为组名
查看相关文件
/etc/group
代码调试中的问题和解决过程
-
问题1:运行
cp1.c
时出错,提示usage: ./cp1 source destination
。 -
解决方法:看到错误提示中的
source destination
,我就知道应该是和文件的源地址有关,但是并不清楚该如何改正,我想到了使用man cp
命令查看标准cp命令的使用方法,发现cp命令的使用格式应该是cp source dest
,于是我使用相似的格式./cp1 cp1.c(源文件) cpp.c(目的文件)
运行成功。
-
问题2:编译
fileinfo.c
时显示warning
警告信息。 -
解决方法:不用解决,警告并不是错误,可以直接运行,警告信息是告诉我代码中发生了强制类型转换。
-
问题3:运行
fileinfo.c
时既没有出现预期结果,也没有显示错误 -
解决方法:我又看了一边代码,思考了一下这个代码的功能,发现自己没有指定要显示信息的文件,指定显示
cp1.c
文件信息后运行成功。
-
问题4:我的虚拟机突然连不上网了,重启也没用……我的电脑是联网正常的。
-
解决方法:还原虚拟机网络设置,步骤:选择
编辑
选项卡的虚拟网络编辑器
选项,点击页面左下角的恢复默认设置
按钮。(此步骤需要在虚拟机没有运行的时候操作)
本周代码托管截图
- 代码托管连接
- 第1~4周项目分文件夹时弄乱了已删除,从第五周开始存在新项目里。
- PS:git上学期用还好好的,这学期就总是会出问题,果然当初新建项目时很重要,新建的项目格式有问题之后调整就很费劲,总是会莫名其妙(其实是对git命令的含义不了解)的传不上去,或者全部覆盖(碰见问题按照百度解决时跟自己预期的结果不同)……还好我的代码一直留着,覆盖也只是重新传一次相同的,就是上传时间会改……
本周代码行数统计截图
其他(感悟、思考等,可选)
本周学习了老师上传到QQ群的一些代码,对于每一个代码,我都先了解它的功能,然后逐行理解它每一句话的意思、参数等信息(这一部分主要是百度和参看13级学长学姐们第九、十周的博客),接着预期它的运行结果,最后在虚拟机上编译、运行进行结果验证。在学习过程中,我对于编程有了进一步的了解,对于C语言的一些知识做了回顾,也通过man命令对Linux的部分知识有了更细致的了解,掌握了man这个帮助命令的使用方法。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第零周 | 0/0 | 1/1 | 15/15 | 安装虚拟机 |
第一周 | 0/0 | 1/2 | 25/40 | 学习Linux命令 |
第二周 | 62/62 | 1/3 | 25/65 | 学习C编程 |
第三周 | 176/238 | 1/4 | 20/85 | 学习数的表示和计算 |
第五周 | 57/295 | 1/5 | 20/105 | 学习汇编语言,了解逆向思想 |
第六周 | 150/445 | 1/6 | 25/130 | 学习Y86处理器和HCL硬件描述语言 |
第七周 | 115/560 | 1/7 | 20/150 | 学习存储器相关知识 |
第八周 | 0/560 | 2/9 | 30/180 | 期中总结 |
第九周 | 186/746 | 2/11 | 20/200 | Unix I/O及相关函数 |
第十周 | 423/1169 | 2/13 | 23/223 | man、grep、cp、echostate、fileinfo、filesize、ls、setecho、spwd、testioctl、who代码的理解与调试 |