关于struct的读写

运行环境:Red Hat Enterprise Linux  AS release 3AIX Version 5 操作系统上测试通过
编译命令:cc -o read_file read_file.c
执行命令:./read_file filename
使用注意:fwrite出来的文件,需要同样的操作系统调用fread才能保证文件结构绝对一致
源代码:

#include <stdio.h>
#include <string.h>

typedef struct
{
    int   member1;
    short int member2;
    char  member3[10];
    double member4;
STRUCT1;

int main(int argc, char *argv[])
{
    char filename[50];
    FILE *fp = NULL;
    STRUCT1 l_struct;

    if ( argc != 2 )
    {
        printf("Usage:read_file filename/n");
        exit(0);
    }
   
    memset(&l_struct,' ',sizeof(STRUCT1));
    sprintf(filename,"%s/file/%s",getenv("ENVDIR"),argv[1]); /*环境变量ENVDIR下file文件*/
    printf("文件路径:%s/n",filename);

    /***********************写文件到指定目录*************/
    printf("开始写文件/n");
    fp = fopen(filename, "w+");   /*打开文件,可写方式,+表示如果没有,则新建*/
    if ( fp == NULL )
    {
        printf("写文件失败/n");
        return -1;
    }

    l_struct.member1 = 100;
    l_struct.member2 = 100;
    memcpy(l_struct.member3,"测试文件",8);
    l_struct.member4 = 50.22;

    fwrite(l_struct,1,sizeof(STRUCT1),fp);       /*把结构中的内容写入文件中*/
    fclose(fp);
    /********************写文件结束***********************/

    /********************读文件到结构中********************/
    fp = fopen(filename, "r");    /*打开文件,只读方式*/
    if ( fp == NULL )
    {
        printf("读文件失败/n");
        return -1;
    }

    fwrite(l_struct,1,sizeof(STRUCT1),fp);       /*把结构中的内容写入文件中*/
    fclose(fp);
    /********************写文件结束***********************/

    /********************读文件到结构中********************/
    fp = fopen(filename, "r");    /*打开文件,只读方式*/
    if ( fp == NULL )
    {
        printf("读文件失败/n");
        return -1;
    }

    fwrite(l_struct,1,sizeof(STRUCT1),fp);       /*把结构中的内容写入文件中*/
    fclose(fp);
    /********************写文件结束***********************/

        /********************读文件到结构中********************/
    fp = fopen(filename, "r");    /*打开文件,只读方式*/
    if ( fp == NULL )
    {
        printf("读文件失败/n");
        return -1;
    }

    fread(&l_struct,1,sizeof(STRUCT1),fp);        /*从文件中读取出来并赋值给l_struct结构*/

    print_struct(l_struct);      /*调用函数显示l_struct里的member是否都正确*/

    fclose(fp);                  /*关闭文件*/
    /*******************读文件结束***********************/

    
return 0;
}

int print_struct(STRUCT1 v_struct)
{
    printf("int       member1 [%d]/n",v_struct.member1);
    printf("short int member2 [%d]/n",v_struct.member2);
    printf("char      member3 [%.10s]/n",v_struct.member3);
    printf("double    member4 [%f]/n",v_struct.member4);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值