复习c文件处理内容
编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
main与其他分开,制作静态库和动态库
编写Makefile
提交测试代码和运行结果截图,提交调试过程截图,要全屏,包含自己的学号信息
首先说一下简要的思路
按照娄老师所说的,我们要将整个代码分为三个部分去书写,第一部分是写头文件,第二部分是用来写实现myod读取以及关闭文件的功能,而第三部分是能够使其输出od的字符。
首先第一部分的头文件十分好写
head.h文件
#ifndef HEAD_H#define HEAD_Hvoid od(char str[],int);#endif
第二部分是对main函数的书写
也就是对读取与关闭文件函数的书写
所以一定要用到file函数
#include
接下来是第三部分代码的书写
第三部分代码相对而言是最难的。我们可以看出每行最多只能够输出16个字符,也就是每16一换行。
在编写第三部分代码的时候,我们要注意每行代码数量的上限。
#include"head.h"
#include
void od(char str[100],int a)
{
int b=1,f=0,e=0;
int line=0;
printf("%06d ",line);
putchar(str[0]);
for(b&#61;1;b<&#61;a;b&#43;&#43;){
if(b%16!&#61;0&&str[b]!&#61;&#39;\0&#39;){
if(str[b]!&#61;&#39;\n&#39;)
{
printf(" %2c",str[b]);
}
else{
printf(" \\n");
}
}
else{
printf("\n ");
for(f&#61;e;fprintf(" %02x",str[f]);
}
printf("\n%06d",b&#43;2);e&#61;b;
}
}
printf("\n");
}
实验中遇到的问题和解决方法
1.没有头文件造成的问题
第一次在编写代码时只有od.c与myod.c&#xff0c;并且在代码的开头都没有加head.h,di第一次修改的时候只是在od.c前加入了头文件&#xff0c;然后发现编译还是有问题&#xff0c;最后我在myod.c文件头前加入head.h就好了。
第二部分od的应用&#xff1a;
1 参考教材第十章内容
2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能&#xff0c;注意XXX是文件名&#xff0c;通过命令行传入&#xff0c;不要让用户输入文件名
不要把代码都写入main函数中
要分模块&#xff0c;不要把代码都写入一个.c中
5 提交测试代码和运行结果截图&#xff0c; 提交调试过程截图&#xff0c;要全屏&#xff0c;包含自己的学号信息
6 课上上传代码到码云
首先我们需要调用函数
open函数的原型为&#xff1a;
int open(const char path, int oflags);
int open(const char path, int oflags, mode_t mode);
read函数的原型为&#xff1a;
size_t read(int fildes, void *buf, size_t nbytes);
接下来是编译代码
教材第十章内容总结
非常重要的一章&#xff0c;虚拟存储机制是计算机实现多任务的一项重要技术。计算机正是通过时间片技术使得每个进程在执行时仿佛独占CPU&#xff0c;进而又通过虚拟存储机制使得每一个进程在执行时&#xff0c;仿佛独占内存。
在UNIX系统中有一个说法&#xff0c;一切皆文件。所有的I/O设备&#xff0c;如网络、磁盘都被模型化为文件&#xff0c;而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式&#xff0c;允许UNIX内核引出一个简单、低级的应用接口&#xff0c;称为UNIX I/O&#xff0c;这使得所有的输入和输出都能以一种统一且一致的方式来执行。
打开文件 打开文件操作完成以后才能对文件进行一些列的操作&#xff0c;打开完成过以后会返回一个文件描述符&#xff0c;它在后续对此文件的所有操作中标识这个文件&#xff0c;内核记录有关这个打开文件的所有信息。
改变当前的文件位置。
读写文件
关闭文件
应用完成了对文件的访问之后&#xff0c;就通知内核关闭这个文件&#xff0c;内核释放文件打开时创建的数据结构&#xff0c;并将这个描述符恢复到可用的描述符池中。进程终止&#xff0c;内核也会关闭所有打开的文件并释放他们的存储器资源。