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

最近实习接触到一个任务,这个任务的需求是:

 

写个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");
}
}
}

我想重要的两个地方的代码我都贴了出来,大家可以借鉴借鉴,以免多走弯路。欢迎留言交流。

    原文作者:爱上健身的菇凉
    原文地址: https://blog.csdn.net/XIAXIA__/article/details/9360149
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞