2017-2018-1 20155226 《信息安全系统设计基础》第四周学习总结
项目一:课堂提交补充
参考教材第十章内容
用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
不要把代码都写入main函数中
要分模块,不要把代码都写入一个.c中
- 过程(直接改动myod)
是将定义的*file改变成fd然后标准I/O函数里的fopen换成系统调用的open
是将标准中的读取下一字符的fgets改变成系统调用的读取整个长度字符的read
- 是将标准中的关闭文件的fclose改变成关闭文件描述符close 查询了相应的man:
- 运行截图:
项目二 学习教材第十章内容
以读的方式打开一个已经存在的文件:
fd=Open("foo.txt",O_RDONLY,0)
;打开一个已存在文件,并在后面添加一些数据:
fd=Open("foo.txt",O_WDONLY|O_APPEND,0)
;O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
st_size成员包含了文件的字节数大小。st_mode成员则编码了文件访问许可位和文件类型。
Unix I/O模型是在操作系统内核中实现的。应用程序可以通过诸如open、close、lseek、read、write和stat这样的函数来访问Unix I/O。较高级别的RIO和标准I/O函数都是基于Unix I/O来实现的。
项目三 掌握两个重要命令:
man -k key1 | grep key2| grep 2
: 根据关键字检索系统调用grep -nr XXX /usr/include
:查找宏定义,类型定义
项目四 完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写
head的使用是显示打开文件的前10行内容而tail的使用是显示打开文件的后10行内容
虚拟机中的测试:
- 伪代码:
- HEAD
打开文件对传入参数进行筛选和转换,参数由字符串转换为整型l。 依次读取文件中字符c; 输出字符c; 得到c为回车时, i++; 关闭文件
- TAIL
先打开通过函数lines得到文件行数 对参数l的转换同head.c 依次读取字符,读到回车即j++; 读到j=lines-l时输出读取字符 关闭
- 产品代码
#include#include #include #include #include #include #include int main(int argc,char *argv[]){ ssize_t read(int fd, void *buf, size_t count);int fd=open(argv[2],O_RDONLY,0); int l; int i; char ch; l=atoi(argv[1]); for(i=0;i
#include#include #include #include #include #include #include int lines(){ ssize_t read(int fd, void *buf, size_t count); int i=0; char ch; do { ch=read(fd); if(ch=='\n') i++; }while(ch!=EOF); close(file); printf("%d\n",i); return i;}int main(int argc,char *argv[]){ FILE *fl=open(argv[2],"r"); int len= lines(fd); int j=0; int l=atoi(argv[1]); char c; fl=open(argv[2],"r"); while(j
- 截图
- 问题