10.11课后练习——MyOD系统调用版本

MyOD系统调用版本

题目要求

  • 参考教材《深入理解计算机(第三版)》第十章内容
  • 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
  • 不要把代码都写入main函数中
  • 要分模块,不要把代码都写入一个.c中
  • 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

实践情况

MyOD这个程序我去年做过Java版本的,今年因为电脑问题又将原来Java版本的MyOD作改版,换成C语言版本的MyOD。不过C语言版的MyOD不能直接使用在Linux下直接使用命令行启动,而且也不是使用read这种系统调用函数来读取文件,程序还是都装在一个函数内。
原来的C语言版MyOD的核心部分就是其读写文件部分,原来的代码是这样的:

……
FILE *in=fopen(fileName,"r");
……
 while(!feof(in))
    {
      fscanf(in,"%c",&str[i]);
      if (str[i]=='
')
      {
        printf("
");
      }
      else 
      {
        printf("%x	",str[i]);
        i++;
      }
……

由fopen函数打开指定文件,在确定文件不为空之后,用字符串数组读取文件内每一个字符(包括换行符和空格),再通过%x这样的方法强制输出16位ASCII码值。
我将读取/写出部分从main.c内分离出来之后,使用read方法读取文件:read(file,&c,1)。读取文件名,确认本文件的确存在后,则开始将读取到的文件字符转换成16位ASCII码值输出。
仍然是使用原来的ASCII码值输出方式:printf("%x ",char[c]);
我也想不到还有什么样的方法可以输出ASCII值的方法了。

操作截图

项目链接

原文地址:https://www.cnblogs.com/battlefieldheros/p/7667611.html