写入int类型到文件
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int fd;
int data = 100;
int data2;
fd = open("./file", O_RDWR);
//ssize_t write(int fd, const void *buf, size_t count);
int n_write = write(fd, &data, sizeof(int));
lseek(fd, 0, SEEK_SET); //重要
//ssize_t read(int fd, void *buf, size_t count);
int n_read = read(fd, &data2, sizeof(int));
printf("read:%d\n", data2);
close(fd);
return 0;
}
编码过程中,重点要注意光标位置的变化,否则容易读错数据或不小心覆盖有用数据。只要光标位置正确,读/写时,填入合适的数据长度大小,就能实现功能。
写入结构体到文件
读/写一个结构体
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
struct Test
{
int a;
char c;
};
int main()
{
int fd;
struct Test data={2, 'c'};
struct Test data2;
fd = open("./file", O_RDWR);
//ssize_t write(int fd, const void *buf, size_t count);
int n_write = write(fd, &data, sizeof(struct Test));
lseek(fd, 0, SEEK_SET);
//ssize_t read(int fd, void *buf, size_t count);
int n_read = read(fd, &data2, sizeof(struct Test));
printf("read: %d %c\n", data2.a, data2.c);
close(fd);
return 0;
}
读/写结构体数组
区别不大,就是多了一个大小,将数据大小调整为数组的总长度就好了。
读写两个元素的结构体数组:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
struct Test
{
int a;
char c;
};
int main()
{
int fd;
struct Test data[2] = {{96, 'a'}, {97, 'b'}};
struct Test data2[2];
fd = open("./file", O_RDWR);
//ssize_t write(int fd, const void *buf, size_t count);
int n_write = write(fd, &data, sizeof(struct Test)*2);
lseek(fd, 0, SEEK_SET);
//ssize_t read(int fd, void *buf, size_t count);
int n_read = read(fd, &data2, sizeof(struct Test)*2);
printf("read: %d %c\n", data2[0].a, data2[0].c);
printf("read: %d %c\n", data2[1].a, data2[1].c);
close(fd);
return 0;
}