3. 文件系统

3.1. 概述

提供文件系统部分相关API。

3.2. 常用文件系统库接口函数

3.2.1. fopen

打开文件

原型:

SDFILE *fopen(const char *path, const char *mode);

参数:

path

文件路径

mode

打开模式(只读(“r”),写(“w”),可创建(“w+”))

Note

  • fopen 扩展功能

  • 自动打开、创建文件夹和文件。

  • 说明:

    1. 设备路径+文件,其中文件传入格式:”mnt/sdfile/res/tone/0.ump3”

    1. 文件名带*号,带多少个*表示多少个可变数字,最多为8+3的大小,如表示可变数字名称变为XXX0001,XXXX002这样得格式,不带*号则只创建一个文件,写覆盖。

  • date: 2020-07-22

示例:

SDFILE *decode_file = fopen("mnt/sdfile/res/tone/0.ump3", "r");

3.2.2. fclose

关闭文件

原型:

int fclose(SDFILE *file);

参数:

file

文件句柄

示例:

SDFILE *decode_file = fopen("mnt/sdfile/res/tone/0.ump3", "r");
fclose(decode_file);

3.2.3. fread

从文件中读取数据

原型:

int fread(SDFILE *fp, void *buf, u32 len);

参数:

buf

保存读取到的数据

len

读取字节数

file

指向文件流的文件指针

示例:

SDFILE *decode_file = fopen("mnt/sdfile/res/tone/0.ump3", "r");
fread(decode_file, buf, len);

3.2.4. fwrite

写入数据到文件中

原型:

int fwrite(SDFILE *fp, void *buf, u32 len);

参数:

buf

需要写入的数据

size

每次写入字节数

count

总共写入次数

file

指向文件流的文件指针

示例:

SDFILE *decode_file = fopen("mnt/sdfile/res/tone/0.ump3", "r");
fwrite(decode_file, buf, len);

3.2.5. fseek

Seek到相应得位置

原型:

int fseek(SDFILE *file, int offset, int fromwhere);

参数:

file

文件句柄

offset

偏移量

fromwhere

偏移方式

示例:

SDFILE *decode_file = fopen("mnt/sdfile/res/tone/0.ump3", "r");
fseek(decode_file, 0, SEEK_SET);

3.2.6. flen

获取文件长度

原型:

int flen(SDFILE *file);

参数:

file

文件句柄

示例:

len = flen(file);

3.2.7. fget_name

获取当前文件名称

原型:

int fget_name(SDFILE *file, u8 *name, int len);

参数:

file

文件句柄

name

文件名buf

len

长度

示例:

char lfn_buf[512] = {0};
int lfn_len = fget_name(file, lfn_buf, 512);

3.2.8. fget_attrs

获取文件相关信息

原型:

int fget_attrs(SDFILE *file, struct vfs_attr *attr);//获得文件相关信息如属性、簇号、大小等

参数:

file

文件句柄

attr

属性

示例:

FILE *fp = NULL;
struct vfs_attr param_attr = {0};
char path[36] = "storage/sd0/C/123.mp3";
//===============================//
//          打开参数文件         //
//===============================//
fp = fopen(path, "r");
if (!fp) {
    return -ENOENT;
}

fget_attrs(fp, &param_attr);
param_len = param_attr.fsize;
param_ptr = (u8 *)param_attr.sclust; //cpu access addr

fclose(fp);