使用C语言读写结构体数据并保存到文件
在这篇博客中,我们将探讨如何使用C语言将结构体数据写入文件,并从文件中读取并展示数据。这种操作在很多应用场景中非常有用,比如保存用户信息、配置数据等。
代码实现
以下是完整的代码实现:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
typedef struct Student
{
char name[20];
char sex;
short age;
int id;
} Student;
int main(int argc, const char* argv[])
{
int fd;
Student stu;
fd = open("student.txt", O_RDWR | O_CREAT, 0644);
if (fd < 0)
{
perror("open");
return 1;
}
strcpy(stu.name, "王浩楠");
stu.sex = 'M';
stu.age = 20;
stu.id = 1001;
char str[100];
sprintf(str, "name:%s,sex:%c,age:%d,id:%d", stu.name, stu.sex, stu.age, stu.id);
write(fd, str, strlen(str));
char buf[256] = {};
lseek(fd, 0, SEEK_SET);
int size = read(fd, buf, 256);
printf("%s\n", buf);
close(fd);
return 0;
}
代码分析
-
定义结构体
Student
结构体包含四个字段:姓名、性别、年龄和ID。
-
打开文件
- 使用
open
函数以读写模式(O_RDWR
)和创建模式(O_CREAT
)打开或创建文件student.txt
。文件权限设置为0644
(所有者读写,其他人只读)。如果打开文件失败,程序会输出错误信息并退出。
- 使用
-
初始化结构体数据
- 使用
strcpy
将字符串赋值给结构体中的name
字段,随后直接赋值性别、年龄和ID字段。
- 使用
-
将结构体数据写入文件
- 使用
sprintf
将结构体数据格式化为字符串,并通过write
函数将字符串写入文件。这里使用了格式化字符串"name:%s,sex:%c,age:%d,id:%d"
来组织数据。
- 使用
-
读取并展示文件内容
- 通过
lseek
将文件指针重新定位到文件开头,然后使用read
函数将文件内容读入缓冲区buf
,并将其输出到控制台。
- 通过
-
关闭文件
- 使用
close
函数关闭文件,确保资源被正确释放。
- 使用
运行示例
程序运行后会在当前目录下生成student.txt
文件,并输出以下内容:
name:王浩楠,sex:M,age:20,id:1001
关键点
-
结构体数据的格式化
- 使用
sprintf
将结构体数据格式化为字符串,方便后续保存和读取。这种方式适合保存一些简单的结构体数据。
- 使用
-
文件读写操作
- 使用
write
将字符串写入文件,并通过read
读取文件内容,展示了基本的文件操作方法。
- 使用
-
错误处理
- 程序对
open
函数进行了错误处理,确保在文件打开失败时输出错误信息并退出。
- 程序对
总结
这段代码展示了如何使用C语言将结构体数据保存到文件,并从文件中读取并展示数据。这种方法适用于简单的数据保存需求。在实际应用中,针对复杂的数据结构,可能需要使用二进制格式保存或采用更复杂的序列化方法。