选做题MyOd-20181326

一、题目要求:

  • 复习c文件处理内容
  • 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

  • main与其他分开,制作静态库和动态库

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

  • 在博客园发表一篇博客,重点写遇到的问题和解决过程

 

二、linux下od命令的使用

  • 作用:格式化输出文件中的数据
  • 说明:常见的文件为文本文件二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出他们的值。
  • 格式:od <选项><参数> <文件名>
  • 常用的命令选项:
1. A<RADIX>,--address-radix=RADIX:选择以何种基数表示地址偏移;
2. -j<BYTES>,--skip-bytes=BYTES:跳过指定数目的字节;
3. -N,--read-bytes=BYTES:输出指定字节数;
-S<BYTES>, --strings[=BYTES]:输出长度不小于指定字节数的字符串;
4. -v,--output-duplicates:输出时不省略重复的数据; 
5. -w<BYTES>,--width=<BYTES>:设置每行显示的字节数,od默认每行显示16字节。如果选项--width不跟数字,默认显示32字节;
6. -t<TYPE>,--format=TYPE:指定输出格式,格式包括a、c、d、f、o、u和x,各含义如下:
 a:具名字符;
 c:ASCII字符或者反斜杠;
 d[SIZE]:十进制,正负数都包含,SIZE字节组成一个十进制整数;
 f[SIZE]:浮点,SIZE字节组成一个浮点数;
 o[SIZE]:八进制,SIZE字节组成一个八进制数;
 u[SIZE]:无符号十进制,只包含正数,SIZE字节组成一个无符号十进制整数;
 x[SIZE]:十六进制,SIZE字节为单位以十六进制输出,即输出时一列包含SIZE字节。
--help:在线帮助; 
--version:显示版本信息。

  

三、实验代码:

显示ASCII字符的代码ascii.c:

#include "head.h"
#include <stdio.h>
#include <stdlib.h>

void ascii(char *filename)
{
	FILE *fp;
	char ch;
	fp=fopen(filename,"r");
	ch=fgetc(fp);
	printf("ascii:\n");
	while(ch != EOF)
	{
		if(ch=='\n')
		{
			printf("\n");
		}
		else
		{
			printf("%4d,",ch);
		ch = fgetc(fp);
	}
	fclose(fp);
	}
}

  

 

显示十六进制输出的代码hexa.c:

#include "head.h"
#include <stdio.h>
#include <stdlib.h>

void hexa(char *filename)
{
	FILE *fp;
	char ch;
	printf("Hexadecimal numbers: \n");
	fp=fopen(filename,"r");
	ch=fgetc(fp);
	while(ch!=EOF)
	{
		if(ch=='\n')
		printf("\n");
		
	else
		printf("%4x",ch);
		ch=fgetc(fp);
	}
	fclose(fp);
}

  

主函数代码main1326.c:

#include "head.h"
#include <stdio.h>
#include <stdlib.h>

void main()
{
	char filename[50];
	printf("input filename:");
	scanf("%s",filename);
	ascii(filename);
	hexa(filename);
}

 

头文件head.h:

void hexa(char *filename);
void ascii(char *filename);

 

四、实验步骤:

1.新建一个文本文件myod1326.txt,输入一些信息:

 

2.对所有.c文件进行编译:

 

3.静态库:

 

4.动态库:

 

5.makefile:

 

五、遇到的问题:

1.新建的myod1326.txt文件在编译运行的时候无误,制作静态库时显示了一堆乱码(如下图):

        解决办法:没有找到原因,但我重新写了一个text.txt文件,内容和myod1326.txt一样。然后再运行可执行文件的时候,输入完整的文件名:text.txt,然后就正常显示了。

 

2.编译的时候把主函数的.c文件忘记了,导致缺少.o的文件:

        解决办法:重新再输入一个

gcc -c main1326.c -o myod1326.o

  

posted @ 2020-10-11 20:56  20181326jie  阅读(114)  评论(0编辑  收藏  举报