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]!='
';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就接近了。
-
计划学习时间:10小时
-
实际学习时间:12小时
-
改进情况: