课堂实验 - myod-系统调用版本
内容
-
参考教材第十章内容
-
用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
-
不要把代码都写入main函数中
-
要分模块,不要把代码都写入一个.c中
-
提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
截图与代码
- 代码
- 截图
学习中遇到的问题与解决过程
-
问题1:在加载链接了共享库的模块的时候,出现了找不到共享库的错误(如下图)
-
问题1解决方案:在网上有查找下资料,大致说的都是
-
首先在目录下有共享库,所以第一种可能排除,那么最大的可能是第二种:程序找不到该共享库文件
-
于是我查看了下我的makefile2文件,看看我是怎么链接共享库的:
-
回想起在学习教材的时候,对于地址写的更详细一点,例如:./main.c
-
于是我将第二条命令修改为
gcc main.c ./libod.so -o prog2l
-
然后运行一遍命令
./prog2l main.c
,结果顺利运行出来了 -
问题2:关于用系统调用编写myod的时候,用
man 2 open
找不到该函数 -
问题2解决方案:换一个虚拟机就可以了(原先用的是实验楼的环境,现改成了VritualBox上的虚拟机)
教材学习内容总结
- 系统级I/O
- 错误处理
教材学习中的问题和解决过程
- 问题1:教材中的数据类型size_t是什么意思?
- 问题1解决方案:教材中对此的解释是“表示数据结构大小的首选数据类型”,对此并没有很深的理解,于是百度了一下,解释可归纳为:
一个基本的无符号整数的C / C + +类型, 它是sizeof操作符返回的结果类型, 该类型的大小可选择。因此,它可以存储在理论上是可能的任何类型的数组的最大大小。
--来自百度百科
-
也就是说可以用size_t类型存储任意类型大小的数组
-
问题2:描述符究竟是什么东西?
-
问题2解决方案:看了一下教材,大概可以这么概括:应用程序向内核申请打开某文件时,内核返回该文件的描述符,应用程序可用它来标识文件,而对于这个打开文件的所有信息则有内核来记录。
代码调试中的问题和解决过程
- 贴士1:教材P626页有引用csapp.h的头文件,但这个是系统自带的吗?
- 解说1:试着直接这样编译运行,结果提示编译错误
- 在百度搜索csapp.h,结果显示
- 这说明是自己编写出来的头文件,并不是系统自带的
- 想编译成功,需要先将后面零碎的对csapp.h的代码合并编写完才可以
代码托管
上周考试错题总结
无
结对及互评
本周结对学习情况
- [20155308](博客链接)
- 结对学习内容
- 课堂作业学习
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | ||
第二周 | 300/500 | 2/3 | ||
第三周 | 500/1000 | 1/4 | ||
第四周 | 921/1300 | 1/5 |
-
计划学习时间:10小时
-
实际学习时间:6小时
-
改进情况:运动会结束,会有更多时间来学习了