运行环境: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;}
