2017-2018 20155309南皓芯 信息安全系统基础设计第四周博客

复习c文件处理内容

编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
main与其他分开,制作静态库和动态库
编写Makefile
提交测试代码和运行结果截图,提交调试过程截图,要全屏,包含自己的学号信息

首先说一下简要的思路
按照娄老师所说的,我们要将整个代码分为三个部分去书写,第一部分是写头文件,第二部分是用来写实现myod读取以及关闭文件的功能,而第三部分是能够使其输出od的字符。
首先第一部分的头文件十分好写

head.h文件

#ifndef HEAD_H

#define HEAD_H

void od(char str[],int);

#endif

第二部分是对main函数的书写
也就是对读取与关闭文件函数的书写
所以一定要用到file函数

       #include<stdio.h>
        int main()
        {
        FILE *fp;
        fp=fopen("test.txt","rx");
        if(fp==NULL){
        printf("Fail to open file
");
        return 0;
        }
        char ch, str[100];
        int a,n;
        a=0;
        if((ch=fgetc(fp))!=EOF){
        str[a]=ch;
        a++;
        
        }
        str[a]='';
        
        fclose(fp);
        od(str,a);
        }

接下来是第三部分代码的书写
第三部分代码相对而言是最难的。我们可以看出每行最多只能够输出16个字符,也就是每16一换行。
在编写第三部分代码的时候,我们要注意每行代码数量的上限。

#include"head.h"
#include<stdio.h>
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=1;b<=a;b++){
if(b%16!=0&&str[b]!=''){
if(str[b]!='
')
{
printf("  %2c",str[b]);
}
else{
printf("  \n");
}
}
else{
printf("
      ");
for(f=e;f<b;f++){
printf("  %02x",str[f]);
}
printf("
%06d",b+2);

e=b;
}
}
printf("
");
}

实验中遇到的问题和解决方法

1.没有头文件造成的问题

第一次在编写代码时只有od.c与myod.c,并且在代码的开头都没有加head.h,di第一次修改的时候只是在od.c前加入了头文件,然后发现编译还是有问题,最后我在myod.c文件头前加入head.h就好了。

第二部分od的应用:

1 参考教材第十章内容

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

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

  2. 要分模块,不要把代码都写入一个.c中

5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

6 课上上传代码到码云

首先我们需要调用函数
open函数的原型为:
int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);

read函数的原型为:

size_t read(int fildes, void *buf, size_t nbytes);

接下来是编译代码

教材第十章内容总结

非常重要的一章,虚拟存储机制是计算机实现多任务的一项重要技术。计算机正是通过时间片技术使得每个进程在执行时仿佛独占CPU,进而又通过虚拟存储机制使得每一个进程在执行时,仿佛独占内存。

在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行。
打开文件 打开文件操作完成以后才能对文件进行一些列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息。
改变当前的文件位置。

读写文件

关闭文件

应用完成了对文件的访问之后,就通知内核关闭这个文件,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。进程终止,内核也会关闭所有打开的文件并释放他们的存储器资源。

原文地址:https://www.cnblogs.com/nhx19970709/p/7674297.html