Linux下c语言实现myod
- 首先根据od要输出16进制的功能,以及c语言中文件的打开读取等函数,编写了如下代码。
#include<stdio.h>
#define N 1000
int main()
{
int count1=0,count2=0,number=0;
FILE *fp1;
char model[N],name[N];
char str;
printf("name:");
scanf("%s",&name);
if((fp1=fopen(name,"r"))==NULL)
{
printf("ERROR");
exit(0);
}
while(fgets(model,N,fp1))
{
while(model[number]!='\0')
number++;
while(1)
{
printf("%c\t",model[count1]);
if((count1+1)%16==0||model[count1+1]=='\0')
{
printf("\n");
while(1)
{
printf("%x\t",model[count2]);
count2++;
if(count2%16==0||model[count2]=='\0')
{
printf("\n");
break;
}
}
}
count1++;
if(model[count1]=='\0') break;
}
}
fclose(fp1);
return 0;
}
结果出现了很多问题,如果文本文件中只有一行文字可以实现,如果多输入几个回车就会出现很大的错误。

对比Linux下的od命令有明显错误。

询问结对同学张瑞琦(20155230)开始解决问题。
重新编写代码将其分成主函数:打开文件、读取文件、输出文件内容、关闭文件。fx函数:将文件内容按16进制输出。

修改之后不能输出\n,添加代码
if(ch=='\n')
printf(" \\n");

- 输出没有以16字节换行 ,添加代码
count++;
if(count==16)
{
printf("\n");
count=0;
}

\n不能转化为16进制的0a,之间编写代码fx函数中如果遇到\n输出0a

最后的成品代码如下
void main(){
char a[50];
printf("od -tx -tc ");
scanf("%s",a);
FILE *fp;
char ch;
fp=fopen(a,"r");
ch=fgetc(fp);
printf("原文件输出为:\n");
int count=0;
while(ch!=EOF)
{
if(ch=='\n')
printf(" \\n");
else
printf("%4c",ch);
count++;
if(count==16)
{
printf("\n");
count=0;
}
ch=fgetc(fp);
}
printf("\n");
tx(a);
}
void tx(char *a)
{
FILE *fp;
char ch;
printf("16进制输出为:\n");
fp=fopen(a,"r");
ch=fgetc(fp);
int count=0;
while(ch!=EOF)
{
if(ch=='\n')
printf(" 0a");
else
printf("%4x",ch);
count++;
if(count==16)
{
printf("\n");
count=0;
}
ch=fgetc(fp);
}
fclose(fp);
}
git结果:
参考资料
由于c语言文件基础较差,学习了有关文件的c语言函数。
摘取比较常用的函数如下
fopen 函数说明:
作用:用来打开一个文件
格式:FILE * fopen(const char * path,const char * mode);
返回值:打开文件成功返回一个文件指针,若打开文件失败则返回NULLfclose 函数说明:
作用:关闭一个文件流,释放文件指针
格式:int fclose( FILE *fp );
返回值:如果流成功关闭,fclose 返回 0,否则返回EOFfgetc 函数说明:
作用:从文件指针指向的文件流中读取一个字符,读取一个字节后,光标位置后移一个字节
格式:int fgetc(FILE *stream);
返回值:返回所读取的一个字节,如果读到文件末尾或者读取出错时返回EOF(EOF是文件结束标识符,一般值为-1)fputc 函数说明:
作用:将指定字符写到文件指针所指向的文件的当前写指针位置上
格式:int fputc (char c, File *fp);
返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOFfgets 函数说明:
作用:从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
格式:char *fgets(char *buf, int bufsize, FILE *stream);
返回值:函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
Linux下c语言实现myod的更多相关文章
- 20155322 2017-2018-1《信息安全系统设计》第二周 课堂测试 Linux下C语言实现MYOD
20155322 2017-2018-1<信息安全系统设计>第二周 课堂测试 Linux下C语言实现MYOD [博客目录] 静态库测试 实现方法 相关资料 操作 动态库测试 实现方法 相关 ...
- linux 下C语言学习路线
UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...
- Linux下C语言编程实现spwd函数
Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
- LINUX下中文语言包的安装(转)
在安装盘上已经有各种语言包了,我们只需要找到他们,并安装就可以了.中文的是fonts-chinese-3.02-9.6.el5.noarch.rpmfonts-ISO8859-2-75dpi-1.0- ...
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
- 笔记整理——Linux下C语言正则表达式
Linux下C语言正则表达式使用详解 - Google Chrome (2013/5/2 16:40:37) Linux下C语言正则表达式使用详解 2012年6月6日Neal627 views发表评论 ...
- linux下常用语言的语法检查插件整理
linux下常用语言的语法检查插件 可以结合vim语法检查插件syntastic使用,具体请参考syntastic使用说明 如php,sql,json,css,js,html,shell,c等语法插件 ...
随机推荐
- OC基础数据类型-NSValue
1.NSValue:将指针等复杂的类型存储为对象 struct sct { int a; int b; }sctt; NSValue * value = [[NSValue alloc] initWi ...
- [T-ARA][Day by Day]
歌词来源:http://music.163.com/#/song?id=22704409 作曲 : 金泰贤/赵英秀 [作曲 : 金泰贤/赵英秀] [作曲 : 金泰贤/赵英秀] 作词 : 金泰贤/赵英秀 ...
- Java自学之路(新手一定要看)
Java自学之路(新手一定要看) 转自尚学堂 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游 ...
- Redis数据的底层存储原理
redis底层是用什么结构来存储数据的呢? 我们从源码上去理解就会容易的多: redis底层是使用C语言来编写的,我们可以看到它的数据结构声明.一个 dict 有两个dictht,一个dictht ...
- linux性能系列--网络
一.为啥网络监控不好做? 回答:网络是所有子系统中最难监控的了.首先是由于网络是抽象的,更重要的是许多影响网络的因素并不在我们的控制范围之内.这些因素包括,延迟.冲突.阻塞等 等.由于网络监控中, ...
- 翻译-QPKG开发工具快速开始指南
QPKG开发工具快速开始指南 指导你编译你自己的QPKG软件包 目录 什么是QDK 下载QDK 安装QDK 编译你自己的QPKG软件包 搭建QPKG编译环境 配置QPKG 定制QPKG程序 向QPKG ...
- LCTF wp简单复现
1.T4lk 1s ch34p,sh0w m3 the sh31l 代码如下: <?php $SECRET = `../read_secret`; $SANDBOX = "../dat ...
- Kali-linux密码在线破解
为了使用户能成功登录到目标系统,所以需要获取一个正确的密码.在Kali中,在线破解密码的工具很多,其中最常用的两款分别是Hydra和Medusa.本节将介绍使用Hydra和Medusa工具实现密码在线 ...
- 浅谈Fluent Ribbon 中的SplitButton
Fluent Ribbon Control Suite 就不做介绍了,网上的例子比较多,类似Office2007及以后版本的图形界面(菜单栏).官网地址:https://github.com/flue ...
- Eclipse配置多个Tomcat服务器
我们在开发大型web项目时,经常需要在eclipse中同时启动多个tomcat服务器来开启多个服务.这里讲解一下如何在eclipse中配置多个tomcat服务器. 配置步骤 1. 在tomcat官网( ...