2019-2020-1 20175320 《信息安全系统设计基础》第八周学习总结
一、教材学习内容总结
本周的内容为系统级I/O的方式,主要是对各种应用调用的I/O函数进行了了解,以下是本周内容的总结:
系统I/O
- 打开文件的函数
int open(char *filename, int flags, mode_t mode)
,其中flag是进程对文件的操作行为,mode为访问权限位。函数返回一个文件描述符 - 关闭文件的函数
int close(int fd);
- 读文件的函数
ssize_t Read(int fd, void *buf, size_t count);
- 写文件的函数
ssize_t Write(int fd, const void *buf, size_t count);
- 无缓冲的读写
ssize_t rio_readn(int fd, void *usrbuf, size_t n); ssize_t rio_writen(int fd, void *usrbuf, size_t n);
- 带缓冲的读写
ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n); ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen);
,其中带缓冲的行读取rio_readlineb与rio_readnb可加从使用,但带缓冲区与不带缓冲区的函数不可以交叉使用,带缓冲区的函数必须基于rio_read
函数 - 读取文件信息的函数
int stat(const char *filename, struct stat *buf); int fstat(int fd, struct stat *buf);
- 读取目录内容的函数
DIR *opendir(const char*name);
以及struct dirent *readdir(DIR *dirp);
其中实际使用中需要反复调用readdir函数
man以及grep工具的使用
这里我使用read函数作为例子。
1、使用man -k read | grep 2
命令查看read系统调用。
2、使用man -k read | grep 2 | grep file
命令可在1的基础上进一步缩小范围。
3、使用grep -nr xxx /usr/include
命令查看宏定义,其中n表示显示行号,r表示递归。下图查看了关键字为MAXLINE的宏定义。
二、教材学习中的问题和解决过程
本周内容多为代码实践,教材中没有遇到问题。
三、代码调试中的问题和解决过程
问题1:运行教材代码1的时候出现如图所示问题。
问题1解决方法:发现是没有添加正确的头文件,添加头文件后正常运行。
问题2:练习10.1输出为-1,与实际不符。
问题2解决方法:没有创建代码中需要的文件,创建文件后正常运行。
问题3:练习10.3编译后出现如下错误:
问题3解决方法:通过man 2 wait
查找到所需的头文件,添加后正常运行。
附上练习5运行结果:
四、代码托管
五、其他(感悟、思考等,可选)
本周内容为系统级I/O,通过本章内容使我对系统基础的I/O函数有了了解,这有助于自主实现系统功能,且使得我在无法使用标准库函数的时候有了相应的解决方法。
六、学习进度条
博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|
目标 | 30篇 | 400小时 | |
第三周 | 1/1 | 13/13 | |
第四周 | 1/2 | 22/35 | |
第五周 | 1/3 | 30/65 | |
第六周 | 1/4 | 25/90 | |
第七周 | 1/5 | 22/112 | |
第八周 | 1/6 | 25/137 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
- 计划学习时间:XX小时
- 实际学习时间:XX小时
- 改进情况:
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)