2017-2018-1 20155233 《信息安全系统设计基础》第四周学习总结
课堂实践
- 参考教材第十章内容
- 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
- 不要把代码都写入main函数中
- 要分模块,不要把代码都写入一个.c中
- 提交测试代码和运行结果截图,提交调试过程截图,要全屏,包含自己的学号信息
课上上传代码到码云
od命令
- od命令用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。
常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。在我看来,od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。
-a:此参数的效果和同时指定“-ta”参数相同;
-A::选择以何种基数计算字码;
-b:此参数的效果和同时指定“-toC”参数相同;
-c:此参数的效果和同时指定“-tC”参数相同;
-d:此参数的效果和同时指定“-tu2”参数相同;
-f:此参数的效果和同时指定“-tfF”参数相同;
-h:此参数的效果和同时指定“-tx2”参数相同;
-i:此参数的效果和同时指定“-td2”参数相同;
-j或--skip-bytes=:略过设置的字符数目;
-l:此参数的效果和同时指定“-td4”参数相同;
-N或--read-bytes=:到设置的字符树目为止;
-o:此参数的效果和同时指定“-to2”参数相同;
-s或--strings=:只显示符合指定的字符数目的字符串;
-t或--format=:设置输出格式;
-v或--output-duplicates:输出时不省略重复的数据;
-w或--width=:设置每列的最大字符数;
-x:此参数的效果和同时指定“-h”参数相同;
--help:在线帮助;
--version:显示版本信息。
实现如下
相关知识:
本次实践主义用到一些系统级I/O输入,主要体现在如下
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
void main(int argc,char *argv[])
{
}
使用open函数将filename转换为一个文件描述符,并且返回描述数字。
学习教材附录A,第十章内容
第十章主要学习系统级I/O。
输入操作是从I/O设备复制数据到主存,
输出操作是从主存复制数据到I/O设备。
附录A主要讲错误处理:
- Unix系统中的错误处理:
主要有Unix风格的错误处理;
Posix风格的错误处理;
GAI风格的错误处理。
完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写
head使用:
API分析:head+数字+文件名
,查看文件的前n行。
主要伪代码:
x=atoi(argv[1]);//字符型转换整形,命令行读取
m=open(argv[2],O_RDONLY,0);
if(m==-1)
printf("not found");
while(read(m,&temp,1)!=0)
{
if(temp=='\n')
{
count++;
if(count==x)
{
break;
}
else
printf("%c",temp);
}
else
printf("%c",temp);
}
实现截图:
首先,打开文件,读取输入的数字和文件,在读取文件时,一旦字符为换行符,计数器+1,其次输出文件内容,当计数器的值等于读入的数字时,break退出循环最后关闭文件。
代码实现如下:tail
API分析:tail+数字+文件名
,输出文件的最后一部分,打印最后10行到标准输出中。
伪代码:- 首先,打开个文件,读取输入的数字和文件,在读取文件时,一旦字符为换行符,计数器+1,再关闭文件。n=计数器统计数,令计数器为0
其次,打开文件,当计数器>=n时,输出文件内容,并关闭文件。
主要代码实现如下:
x=atoi(argv[1]);//字符型转换整形,命令行读取
m=open(argv[2],O_RDONLY,0);
if(m==-1)
printf("not found");
while(read(m,&temp,1)!=0)
{
if(temp=='\n')
{
count++;
}
}
实现截图: