运行环境:Red Hat Enterprise Linux AS release 3 、AIX 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;
}