您的位置:首页 > 其它

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

2017-10-15 11:24 288 查看

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

myod的改进

要求:

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

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

要分模块,不要把代码都写入一个.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]!='\n';i++)
{
printf("%4c",ch[i]);
}
printf("\n");
for(i=0;i<m&&ch[i]!='\n';i++)
{
printf("%4x",ch[i]);
}

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



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


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

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]!='\n')

{
printf("%c",text[i]);

}
else{j++;
printf("\n");
}

}

}

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]=='\n')
{
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\n");
int size=read(fd,&ch,buffersize);

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

实现成功。

代码托管

代码提交过程截图:



学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周95/951/18/8学习了gcc与gdb的使用
第二周95/951/112/20学习了myod相关内容
第三周95/951/112/32学习了信息的表示和处理
第四周170/2652/412/40完善学习了myod即head,tail等命令
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

计划学习时间:10小时

实际学习时间:12小时

改进情况:

有空多看看现代软件工程 课件 软件工程师能力自我评价表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: