2017-2018-1 20155203 《信息安全系统设计基础》第四周学习总结
课堂实践myod
- 要求:
-
参考教材第十章内容
-
用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
运行截图:
- 实践中遇到的问题:
- 运行出现错误提示:段错误(核心已转储)
解决方法:
1>使用demsg命令查看:dmesg 可以在应用程序崩溃时,显示内存中保存的相关信息。如下所示,通过 dmesg 命令可以查看发生段错误的程序名称、引起段错误发生的内存地址、指令指针地址、堆栈指针地址、错误代码、错误原因等。
2>使用gdb调试
找到错误出现在代码中定义buf变量的部分,对buf变量只定义为指针,没有对其存储空间具体限定,之后将char *buf
改为
char buf[1024]
- 运行程序后出现乱码
解决方案:将代码中循环读取文件中的字符的条件while(read(fd,buf,16))
改为
while(read(fd,buf,16)!=0)
课后练习:head、tail
-
head指令是用来查看文件内容的;例如:
head -5 20155203.txt
可以用来查看20155203.txt文件中的前五行 -
tail指令是用来查看文件的后几行代码以及文件的更新;
tail -5 20155203.txt
用来查看20155203.txt文件的后五行。 -
head.c伪代码
int head()
{
对传入参数进行筛选和转换,参数由字符串转换为整型l。
do
{
依次读取文件中字符c;
输出字符c;
得到c为回车符时,int i++;
}while(i<l)
}
运行截图:
- tail.c伪代码
int tail()
{
通过函数lines得到文件行数
对参数l的转换同head.c
do
{
依次读取字符,读到'\n'即int j++;
读到j=lines-l时输出读取字符
}
}
运行截图:
- 代码链接
- 遇到的问题及解决方法
在编写tail.c时遇到了无法运行的问题。是在c文件编译运行通过后,只出现光标闪烁但是没有运行结果的问题,在上网查阅了fgetc()函数的具体内容后发现是用lines(FILE *file)函数统计行数后,光标移动到了文件的最后所以无法再次进行读取,之后对这一部分的代码进行了修改,在行数统计完成的同时关闭文件,并再次打开,这样的重复操作属于此次编写的一个问题,后续还会修改。
课下实践的体会
通过课下实践进一步理解了写指令实现代码的技巧,增加了对指令的了解以及思考。
参考资料:
如何查看linux指令源代码
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Huawei LiteOS基于Cortex-M4 GD32F4平台移植
· mysql8.0无备份通过idb文件恢复数据过程、idb文件修复和tablespace id不一致处