您的位置:首页 > 运维架构 > Linux

c写个linux的小程序,从bin文件中读取数据,打印结构体中的成员变量。

2013-07-17 21:11 633 查看
最近实习接触到一个任务,这个任务的需求是:



写个linux的小程序,当输入参数-t时,打印当前时间;当输入参数-f时,则打印出头文件中的所有结构体。



我手中有的材料是:

一个头文件,头文件中定义了很多结构体,结构体中还有结构体变量,总共三层。



刚开始接触到这个任务的时候,一头雾水,本身c语言就不熟,更何况在linux下编程,非常慌张。上网很久,也在CSDN和百度上发了求助帖,浪费了很多积分,最后也没有获得什么满意的答复。但是这个学习和搜索的过程也是非常幸福的。查了很多资料后,才渐渐有了思路。我想了想这个问题可以分为三个小部分。



1、当输入参数-t, -f时。。。。这个条件如何控制?

2、bin文件中的数据和头文件中的结构体变量时怎样关联的?我怎么利用bin文件的数据对头文件中的结构体成员变量进行初始化?

3、完成初始化工作后,我怎么将结构体中的数据进行打印?



由于公司保密原因,所以只贴出部分代码。通过下面的步骤就已经对大的结构体A进行了初始化了。

FILE *file;
A *p1=new A;
int sizeread=sizeof(_ASA_TEST_PACKAGE);
int buf[250];
fopen_s(&file,"core_pass2.txt","rb");    //以二进制的方式打开文件
if (file==NULL)
{
printf( "The file was not opened\n" );
}
fread(buf,1,sizeread,file);
p1=(A*)buf;

至于打印,贴出一个函数,这个函数的使用非常方便,只需要传入要打印结构体的结构体指针和结构体大小,就可以进行打印,且可以控制一行打印的字节数和字节与字节之间是否需要留一个空格。

void print_struct_content(void *strp, size_t size)
{
size_t i;
char *printbit=(char *)strp;
int formatter=0;
for (i=0; i<size; i++)
{
printf("%02X",printbit[i]&0XFF);
formatter++;
if ((formatter%4)==0)
{
printf("\n");
}
}
}

我想重要的两个地方的代码我都贴了出来,大家可以借鉴借鉴,以免多走弯路。欢迎留言交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐