Linux写整数 结构体数组到文件
一 写入一个整数到文件
在之前我们学习write
函数和read
函数时
ssize_t write(int fd, const void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);
上面两个buf缓冲区,我们常常用来写字符或者字符串。通常会认为只能写字符或者字符串。可以看出buf是个指针类型,我们可以传任何地址。它对类型没有要求
我们写入一个整数到文件
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int *p;//设置写入缓冲区(int类型指针)
int *m;//设置读出缓冲区(char类型指针)
p=(int*)malloc(sizeof(int)*4);//开辟写入缓冲区空间
m=(int*)malloc(sizeof(int)*4);//开辟读出缓冲区空间
*p = 100;//给p赋值
int fd=open("./test2",O_RDWR|O_CREAT,0600);
write(fd,p,3);//写入函数
lseek(fd,0,SEEK_SET);
read(fd,m,3);
printf("%d",*m);
close(fd);
}
结果如下:
二 写入一个结构体到文件
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
struct test{
int data;
char str;
}; //创建一个结构体
int main()
{
struct test new1 = {100,'a'}; //初始化结构体
struct test new2;
int fd=open("./test3",O_RDWR|O_CREAT,0600);
write(fd,&new1,sizeof(struct test)*1);//写入结构体,传入结构体地址
lseek(fd,0,SEEK_SET);
read(fd,&new2,sizeof(struct test)*1);//读到缓冲区
printf("%d %c",new2.data,new2.str);
close(fd);
}
三 写入一个结构体数组到文件
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
struct test{
int data;
char str;
};
int main()
{
struct test data0[3] = {{100,'a'},{200,'b'},{300,'c'}};//定义一个结构体数组
struct test data2[3];//读入缓冲区
int fd=open("./test3",O_RDWR|O_CREAT,0600);
write(fd,&data0,sizeof(struct test)*3);
lseek(fd,0,SEEK_SET);
read(fd,&data2,sizeof(struct test)*3);
printf("%d %c\n",data2[0].data,data2[0].str);
printf("%d %c\n",data2[1].data,data2[1].str);
printf("%d %c\n",data2[2].data,data2[2].str);
close(fd);
}
效果如下: