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就接近了。

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

原文地址:https://www.cnblogs.com/paypay/p/7670319.html