2017-2018-1 20155306 《信息安全系统设计基础》第4周学习总结

2017-2018-1 20155306 《信息安全系统设计基础》第四周学习总结

课上实践--myod-系统调用版本【已完成】

代码链接
运行截图如下:截图内有部分关键代码

•要求:

1.参考教材第十章内容

2.用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc
XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名

3.不要把代码都写入main函数中

4.要分模块,不要把代码都写入一个.c中

5.提交测试代码和运行结果截图,提交调试过程截图,要全屏,包含自己的学号信息

6.课上上传代码到码云

head/tail的使用

head/tail是linux中常见的文本选取命令,用以选取头部/尾部的若干行文本。

  • 使用命令查看帮助文档如下:
man -k head | grep 1
man -k tail | grep 1

  • 通过man命令看head,tail的具体详细使用方法,以及之后编写产品代码需要read函数的头文件等信息都可以在这里找到:
man  head 
man  tail 
man read

  • 直接使用命令进行验证,head输出文档前十行,tail输出文档的后十行:

命令格式:

通过上述帮助文档,可以得出不加选项的情况下默认输出头部的10行文本。使用-n选项搭配数字可以指定需要输出的文本行数量,其中若number为负数时表示输出前面所有的行,但不包括最后的|number|行。

head -n number filename  

和head基本相似,但是表示输出末尾的文本。另外一个区别是number如果带+号表示输出末尾的所有文本,但不包括前number-1行。

tail -n number filename 

编程实现:

head伪代码:

{
    打开文件;
    以循环的形式读入文件;
    读入换行符,则计数器加一;
    读入10行则停止输出;
    关闭文件;
    程序结束。
}

head产品代码:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <stdio.h>

#include <unistd.h>



int main(int argc,char *argv[])

{



    int f,i=0;

    char ch;

    f=open(argv[1],O_RDONLY,0);

    if(f==-1)

    {

        printf("error!");

       



} 

    while(read(f,&ch,1)!=0)

    {

        printf("%c",ch);

        if(ch=='\n') i++;

        if(i==10) break;

    }

    close(f);

    exit(0);

}

head运行截图:

tail伪代码:

{
    打开文件;
    以循环的形式读入文件;
    计算文件总行数;
    读入换行符,则计数器加一;
    从后向前,读入10行则停止输出;
    关闭文件;
    程序结束。
}

tail产品代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc,char *argv[])
{

    int f,f2,i=0,j;
    char ch;
    int len;
    f=open(argv[1],O_RDONLY,0);
    if(f==-1)
    {
        printf("error!");
exit(0);
} 
    while(read(f,&ch,1)!=0)
    {
       // printf("%c",ch);
        if(ch=='\n') i++;
   
    }
	close(f);
 f2=open(argv[1],O_RDONLY,0);
 while(read(f,&ch,1)!=0)
    {
        
        if(ch=='\n') j++;
	if(j>=i-10) 
	printf("%c",ch);

    }

    close(f2);

    exit(0);
}

tail运行截图:

代码链接

代码中遇到的问题:

  • 问题一:
    在编译head.c时遇到如下问题提示:

  • 解决:通过百度,该英文提示的意思是:括号不匹配。重新 vi head.c 发现自己少了一个大括号。

  • 问题二:
    在运行tail.c时,发现自己明明在代码中进行了行数控制,但输出的却还是整个文档的内容。

  • 解决:我从头到尾检查了代码,感觉没有错误。然后我把行数控制修改到5,结果输出的还是整个文档,这说明行数控制不起效果。后来恍然大悟计数是一个文件,后面输出应该是另外是另外的文件。重新读取新一个文件,再进行换行符计数,输出文档。

其他(感悟、思考等,可选)

有一点关于代码的感悟,在编代码时,我正在苦恼于怎么计数,找到的计数函数总是出错。我的搭档提醒我可以先整个文档读一遍来计数,然后再读取输出。我觉得这个方法很好,而且工作量减小,同一段代码多次使用,所以我感觉一起学习感觉很好,省时高效,互相帮助!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 1/2 10/15 第一章
第三周 130/210 1/2 21/36 第二章
第四周 70/ 280 1/3 10/46 第十章

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

posted on 2017-10-15 22:53  20155306  阅读(175)  评论(2编辑  收藏  举报

导航