zoukankan      html  css  js  c++  java
  • 20155219 2017-2018-1 《信息安全系统设计》第4周学习总结

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

    myod的改进

    • 要求:

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

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

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

    • 解答:
      我写了两个版本
      版本一:将上次我写的myod1进行了修改。修改后:用户在命令行中输入指令,并且添加了函数txtc()。运用的函数是fopen,运行结果如下图所示:

    局限:只能做类似于od tx tc的命令,其他的命令无法灵活性实现。

    版本2:运用了函数open和read,通过系统调用了解它们的用途如下:

    灵活运用这两个函数得到change函数主体如下:

    while((m=read(flag,ch,16))!=0)
    {
    for(i=0;i<m&&ch[i]!='
    ';i++)
    {
    	printf("%4c",ch[i]);
    }
    		printf("
    ");
    	for(i=0;i<m&&ch[i]!='
    ';i++)
    {
    	printf("%4x",ch[i]);
    }
    

    一开始得到的粗略显示如下:

    之后进行调整,令其显示行号并且将换行符“ ”用符号表示而不是换行。调整之后的输出为如下图:

    相比较与版本一,当时还不太熟悉文件的打开与读出总有许多的问题,当我熟悉了相关内容在进行版本二的开发时就轻松了许多。

    head、tail命令

    通过man head和man tail命令可以看到如下图关于两条命令的显示:

    它们的应用过程如下:

    • 之后自己编写代码进行实现:
      1.tail命令

    伪代码如下:

    void head(包含文件内容的数组str「」,数组长度num,命令行中输入的数字n)//打印倒数n行
    {
        for(i=0;i<n;i++)
    {
    	收集换行符,统计个数j;
    }
    
        for(i=0;i<j;i++)
    {
    	收集换行符,直到第j-n个;
    }
    输出之后的n行即可;
    }
    

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void head(char text[], int size,int n)//top 10
    {
    	int i,j=0;
    	for(i=0;i<size&&j<n;i++)
    {
    if(text[i]!='
    ')
    
    {
    printf("%c",text[i]);
    
    }
    	else{j++;
            printf("
    ");
    }
    
    
    }
    
    }
    

    2.head命令

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void tail(char text[], int size,int n)//tail 10
    {
    	int i,j=0,k;
    	for(i=size;i>0&&j<=n;i--)
    {
    if(text[i]=='
    ')
    {
    j++;
    //printf("%c",text[i]);
    }
    }
    for(k=i+2;k<=size;k++)
    {  printf("%c", text[k]);}
    }
    

    正确之后的运行与实现如下图:

    代码调试过程中遇到的问题:

    1.一开始一直出现如下图的错误:

    解决方案:是因为argv[]命令行输入的数字是以字符进行保存的,故需要用aoti函数进行转化即可。

    简单-cp *** ***的c语言实现(简单版)(使用系统调用版)

    只显示主要内容

     fd=open(argv[1],O_RDONLY,0);
        if(fd==-1)
        printf("error
    ");
        int size=read(fd,&ch,buffersize);
        
        fd1=creat(argv[2],copymode);
        if(fd1==-1)
        printf("error
    ");
        /*for(i=0;i<size;i++)
        {
            printf("%c",ch[i]);
        }*/
        write1=write(fd1,&ch,size);
        if(write1!=size)
        printf("error
    ");  
        close(fd1);
        close(fd);
    

    实现成功。

    代码托管

    • 代码提交过程截图:

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 95/95 1/1 8/8 学习了gcc与gdb的使用
    第二周 95/95 1/1 12/20 学习了myod相关内容
    第三周 95/95 1/1 12/32 学习了信息的表示和处理
    第四周 170/265 2/4 12/40 完善学习了myod即head,tail等命令

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

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

  • 相关阅读:
    XML相关资源
    【翻译】Windows下文件的命名
    显示文件的16进制编码(C++)
    函数模板的匹配
    最新的flex4.1和as3.0的帮助文档
    Flash/Flex 框架简介—PureMVC
    textfield的诡异
    灵异的bug
    互联网公司的发展都在于专注和坚持。
    python内置数据类型
  • 原文地址:https://www.cnblogs.com/paypay/p/7670319.html
Copyright © 2011-2022 走看看