linux c将数据结构整体写入文件并整体读取数据

linux c将数据结构整体写入文件并整体读取数据,第1张

linux c将数据结构整体写入文件并整体读取数据

当数据量过大的时候,存在内存中就不是一个合理的方式,就可以选取写入文件来进行保存,读取数据。

以下是一个demo,用来记录学习的。保存一下!

ps:附加fopen的参数

#include 
#include 
#include 
typedef struct
{
    char s[100];
    int h;
} st2;
typedef struct
{
    char c;
    char *str;
    char s[100];
    int h;
    st2 k;
} st;
//写文件函数,将上面结构写入文件
int write()
{
    FILE *fp;
    st sa, sb;
    char *str = "abcdefg";
    sa.c = 'K';
    sa.str = "abcdefg";
    strcpy(sa.s, str);
    strcpy(sa.k.s, "fff");
    sa.k.h = 20;
    sa.h = -3;

    fp = fopen("st.txt", "w+");
    if (!fp)
    {
        printf("errror!n");
        exit(-1);
    }
    printf("sa:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sa.c, sa.str, sa.s, sa.h, sa.k.s, sa.k.h);
   // printf("sizeof(sa)=%d:&c=%x,&str=%x,&s=%x,&h=%xn", sizeof(sa), &sa.c, &sa.str, &sa.s, &sa.h);
    fwrite(&sa, sizeof(sa), 1, fp);
    strcpy(sa.s, "hhjjj44433");
    fwrite(&sa, sizeof(sa), 1, fp);//写两次,模拟写入多个结构体
    //rewind(fp);
    //fread(&sb, sizeof(sb), 1, fp);
    //printf("sa:c=%c,str=%s,s=%s,h= %dn", sa.c, sa.str, sa.s, sa.h);
    fclose(fp);

    return 0;
    
}
//主函数,在主函数调用写文件,并读取文件中数据并打印查看信息
int main(void)
{
    FILE *fp;
    st sb;
    write();
    fp=fopen("st.txt","r");
    if(!fp)
    {
        printf("errror!n");
        exit(-1);
    }
    fread(&sb,sizeof(sb),1,fp);
    printf("read file sb:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sb.c, sb.str, sb.s, sb.h , sb.k.s, sb.k.h);
    fread(&sb,sizeof(sb),1,fp);
    printf("read file2 sb:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sb.c, sb.str, sb.s, sb.h , sb.k.s, sb.k.h);
   // printf("sizeof(sb)=%d:&c=%x,&str=%x,&s=%x,&h=%xn", sizeof(sb), &sb.c, &sb.str, &sb.s, &sb.h);

    fclose(fp);

    return 0;
}

#if 0
输出结果:
sa:c=K,str=abcdefg,s=abcdefg,h= -3, k.s= fff, k.h= 20     //写文件处打印
read file sb:c=K,str=abcdefg,s=abcdefg,h= -3, k.s= fff, k.h= 20 //第一次读
read file2 sb:c=K,str=abcdefg,s=hhjjj44433,h= -3, k.s= fff, k.h= 20//第二次读

结论:
如果要用追加的方式写用”a+”方式打开文件;读取用“r”方式读取;ps:“a+”如果文件不存在会创建文件
#endif

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4653729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存