2017-2018-1 20155336 《信息安全系统设计基础》第四周学习总结
2017-12-05 18:46
696 查看
2017-2018-1 20155336 《信息安全系统设计基础》第四周学习总结
本周目标:
补充完成课上没有完成的内容(2分)学习教材附录A,第十章内容
参考别出心裁的Linux系统调用学习法,学习视频,掌握两个重要命令:
man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用 grep -nr XXX /usr/include :查找宏定义,类型定义
完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写(3分)
myod-系统调用版本
参考教材第十章内容用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
不要把代码都写入main函数中
要分模块,不要把代码都写入一个.c中
提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
![](https://t1.picb.cc/uploads/2017/10/15/OuQiN.png)
代码:
main:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> void main(int argc,char *argv[]) { int m,n; m=open(argv[1],O_RDONLY,0); if(m==-1) printf("not found"); zhuanhuan(m); n=close(m); if(n==-1) printf("文件关闭失败"); } void zhuanhuan(int m) { char temp; while(read(m,&temp,1)!=0) { if(temp=='\n') printf("\n"); else { printf("%x ",temp); } } }
ASCII
#include<stdio.h> void ascii(char args[],int j) { int i; printf("%07o",16*j); j++; for(i=0;args[i]!='\0';i++) { if(args[i]=='\n') printf("%x",'\n'); printf("%4x",args[i]); } printf("\n"); }
h
#include<stdio.h> void hex(char args[]) { int i; printf(" "); for(i=0;args[i]!='\0';i++) { if(args[i]=='\n') printf("\\n"); else printf("%4c",args[i]); } printf("\n"); }
教材学习内容总结
输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程。 输入操作:从I/O设备拷贝数据到主存、输出操作:从主存拷贝数据到I/O设备Unix I/O是一个简单低级的应用接口,可以把所有的输入输出当作对文件的读写来执行。
打开文件:标准输入描述符为0、标准输出描述符为1、标准错误描述符为2.
改变当前的文件位置:文件位置是从文件开头起始的字节偏移量。
读写文件:从当前文件位置开始。当大于文件长度的时候出发EOF条件。
关闭文件。
open函数
int open(char *filename,int flags,mode_t mode);
flages参数指明进程打算如何访问该文件O_RDONLY:只读、O_WRONLY:只写、O_RDWR:可读可写``O_CREAT:如果文件不存在就创建一个截断的(空)文件、O_TRUNC:如果文件已经存在,就截断它。、O_APPEND:每次写操作前,设置文件位置到文件的结尾处。
mode参数指定新文件的访问权限位,每个进程都有一个umask,是通过调用umask函数来设置的。当进程通过带某个mode参数的open函数调用来创建一个新文件时,文件的访问权限位被设置为mode & ~umask
进程通过调用close函数关闭一个打开的文件:
int close(int fd);
read函数:从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf,返回值-1表示错误,返回值0表示EOF。
read和write传送的字节一般比应用程序要求的少,不足值产生的情况有:
读时遇到EOF
从终端读文本行
读和写网络套接字
RIO包可自动处理不足值。 ssize_t rio_readn(int fd,void *usrbuf,size_t n);
无缓冲的输入输出函数:直接在存储器和文件之间传送数据。
带缓冲的输入函数:允许从文件中读取文本行和二进制数据,文件内容缓存在应用级缓冲区内。
应用程序通过调用statint stat(const char filename,struct stat buf);和fststint fstat(int fd,struct stat *buf);
函数检索关于文件的信息。
两个重要的命令
man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用grep -nr XXX /usr/include:查找宏定义,类型定义
完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写
通过man命令看head,tail的具体详细使用方法,以及之后编写产品代码需要read函数的头文件等信息都可以在这里找到:man head man tail man read
![](https://s1.ax1x.com/2017/11/30/4mRzT.png)
![](https://s1.ax1x.com/2017/11/30/4mfQU.png)
head命令
1.命令格式:head [参数]... [文件]...
2.命令功能:
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
3.命令参数:
-q 隐藏文件名 -v 显示文件名 -c<字节> 显示字节数 -n<行数> 显示的行数
![](https://t1.picb.cc/uploads/2017/10/15/OcejD.png)
tail命令
1.命令格式:tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
以逆序显示行:
tail [ -r ] [ -n Number ] [ File ]
2.命令功能:
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
3.命令参数:
-f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的字节数 -n<行数> 显示行数 --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束. -q, --quiet, --silent 从不输出给出文件名的首部 -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
![](https://t1.picb.cc/uploads/2017/10/15/Oc8GX.png)
问题和解决过程
本章内容是关于系统及I/O的知识点,在之前几章的学习都有所接触问题总的不大,但是在10.2中关于打开和关闭文件的open函数中的第三个参 数的使用存在问题。书上p597写了一个例子,文件的拥有者有读写权限,而其他的用户都有读权限。而答案为什么给出的是umask(DEF _ UMASK);fd = Open("foo.txt",O _CREATE|O _TRUNC|O _WRONLY,DEF _MODE);给出的O _WRONLY是只读,而并不是读写操作,是如何 完成的读写操作?而其也具体的权限参数是什么?根据上面的解释知道是Open函数的第二个flags参数是指明了进程打算如何访问这个文件,第 三个mode _t mode参数是指明文件的访问权限,结合图10—1会知道具体的访问权限。后来通过看书,发现自己忽略掉了一点就是每个进程都有 一个umask,它是通过调用umask函数来设置的。这样以来之前对于这个答案有所定义给定了mode和umask默认值: #define DEF _MODE S _IRUSR|S _IWUSR|S _IRGRP|S _ IWGRP|S _IROTH|S _IWOTH #define DEF _UMASK S _IWGRP|S _IWOTH,这样在结合之前的Open函 数就解决了我的问题。
代码托管
结对及互评
20155315结对照片
1、Linux系统下的C源文件的处理方式比windows下的要更加丰富。
2、关于计算机语言中的各种运算仍需要加深理解。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 4/9 | 30/90 |
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
参考:软件工程软件的估计为什么这么难,软件工程 估计方法
计划学习时间:10小时
实际学习时间:10小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
《深入理解计算机系统V3》学习指导...
相关文章推荐
- 2017-2018-1 20155308 《信息安全系统设计基础》第四周学习总结(第四周测试)
- 20155336 2017-2018 1 《信息安全系统设计基础》第3周学习总结
- 2017-2018-1 20155227 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155336 《信息安全系统设计基础》第五周学习总结
- 2017-2018-1 20155228 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155333 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155206 《信息安全系统设计基础》第四周学习总结
- 2017-2018-20155336 《信息安全系统设计基础》第六周学习总结
- 2017-2018-1 20155336 《信息安全系统设计基础》第十三周学习总结
- 2017-2018-1 20155214 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155335俞昆 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155324 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155332 《信息安全系统设计基础》第四周学习总结
- 2017-2018-20155336 《信息安全系统设计基础》第七周学习总结
- 2017-2018-1 20155336 《信息安全系统设计基础》第十四周学习总结
- 2017-2018-1 20155339 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155208 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155313 《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155317 《信息安全系统设计基础》第四周学习总结