Zephyr Project API  3.2.0
A Scalable Open Source RTOS
fs.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016 Intel Corporation.
3 * Copyright (c) 2020-2021 Nordic Semiconductor ASA
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef ZEPHYR_INCLUDE_FS_FS_H_
9#define ZEPHYR_INCLUDE_FS_FS_H_
10
11#include <sys/types.h>
12
13#include <zephyr/sys/dlist.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
25struct fs_file_system_t;
26
32};
33
48enum {
51
54
57};
58
60#define FS_MOUNT_FLAG_NO_FORMAT BIT(0)
62#define FS_MOUNT_FLAG_READ_ONLY BIT(1)
68#define FS_MOUNT_FLAG_AUTOMOUNT BIT(2)
77#define FS_MOUNT_FLAG_USE_DISK_ACCESS BIT(3)
78
91struct fs_mount_t {
93 int type;
94 const char *mnt_point;
95 void *fs_data;
97 /* fields filled by file system core */
98 size_t mountp_len;
99 const struct fs_file_system_t *fs;
101};
102
115struct fs_dirent {
118 size_t size;
119};
120
133 unsigned long f_bsize;
134 unsigned long f_frsize;
135 unsigned long f_blocks;
136 unsigned long f_bfree;
137};
138
139
145#define FS_O_READ 0x01
147#define FS_O_WRITE 0x02
149#define FS_O_RDWR (FS_O_READ | FS_O_WRITE)
151#define FS_O_MODE_MASK 0x03
152
154#define FS_O_CREATE 0x10
156#define FS_O_APPEND 0x20
158#define FS_O_FLAGS_MASK 0x30
159
161#define FS_O_MASK (FS_O_MODE_MASK | FS_O_FLAGS_MASK)
170#ifndef FS_SEEK_SET
172#define FS_SEEK_SET 0
173#endif
174#ifndef FS_SEEK_CUR
176#define FS_SEEK_CUR 1
177#endif
178#ifndef FS_SEEK_END
180#define FS_SEEK_END 2
181#endif
186/*
187 * @brief Get the common mount flags for an fstab entry.
188
189 * @param node_id the node identifier for a child entry in a
190 * zephyr,fstab node.
191 * @return a value suitable for initializing an fs_mount_t flags
192 * member.
193 */
194#define FSTAB_ENTRY_DT_MOUNT_FLAGS(node_id) \
195 ((DT_PROP(node_id, automount) ? FS_MOUNT_FLAG_AUTOMOUNT : 0) \
196 | (DT_PROP(node_id, read_only) ? FS_MOUNT_FLAG_READ_ONLY : 0) \
197 | (DT_PROP(node_id, no_format) ? FS_MOUNT_FLAG_NO_FORMAT : 0) \
198 | (DT_PROP(node_id, disk_access) ? FS_MOUNT_FLAG_USE_DISK_ACCESS : 0))
199
204#define FS_FSTAB_ENTRY(node_id) _CONCAT(z_fsmp_, node_id)
205
212#define FS_FSTAB_DECLARE_ENTRY(node_id) \
213 extern struct fs_mount_t FS_FSTAB_ENTRY(node_id)
214
224static inline void fs_file_t_init(struct fs_file_t *zfp)
225{
226 *zfp = (struct fs_file_t){ 0 };
227}
228
238static inline void fs_dir_t_init(struct fs_dir_t *zdp)
239{
240 *zdp = (struct fs_dir_t){ 0 };
241}
242
274int fs_open(struct fs_file_t *zfp, const char *file_name, fs_mode_t flags);
275
287int fs_close(struct fs_file_t *zfp);
288
303int fs_unlink(const char *path);
304
330int fs_rename(const char *from, const char *to);
331
348ssize_t fs_read(struct fs_file_t *zfp, void *ptr, size_t size);
349
369ssize_t fs_write(struct fs_file_t *zfp, const void *ptr, size_t size);
370
389int fs_seek(struct fs_file_t *zfp, off_t offset, int whence);
390
406
427int fs_truncate(struct fs_file_t *zfp, off_t length);
428
445int fs_sync(struct fs_file_t *zfp);
446
460int fs_mkdir(const char *path);
461
476int fs_opendir(struct fs_dir_t *zdp, const char *path);
477
497int fs_readdir(struct fs_dir_t *zdp, struct fs_dirent *entry);
498
510int fs_closedir(struct fs_dir_t *zdp);
511
539int fs_mount(struct fs_mount_t *mp);
540
555int fs_unmount(struct fs_mount_t *mp);
556
572int fs_readmount(int *index, const char **name);
573
590int fs_stat(const char *path, struct fs_dirent *entry);
591
606int fs_statvfs(const char *path, struct fs_statvfs *stat);
607
623int fs_register(int type, const struct fs_file_system_t *fs);
624
636int fs_unregister(int type, const struct fs_file_system_t *fs);
637
643#ifdef __cplusplus
644}
645#endif
646
647#endif /* ZEPHYR_INCLUDE_FS_FS_H_ */
ZTEST_BMEM int index[(3)]
Definition: main.c:32
Doubly-linked list implementation.
uint8_t fs_mode_t
Definition: fs_interface.h:36
#define MAX_FILE_NAME
Definition: fs_interface.h:30
struct _dnode sys_dnode_t
Definition: dlist.h:49
int fs_opendir(struct fs_dir_t *zdp, const char *path)
Directory open.
int fs_unregister(int type, const struct fs_file_system_t *fs)
Unregister a file system.
int fs_statvfs(const char *path, struct fs_statvfs *stat)
Retrieves statistics of the file system volume.
int fs_mkdir(const char *path)
Directory create.
int fs_rename(const char *from, const char *to)
Rename file or directory.
int fs_mount(struct fs_mount_t *mp)
Mount filesystem.
int fs_close(struct fs_file_t *zfp)
Close file.
off_t fs_tell(struct fs_file_t *zfp)
Get current file position.
fs_dir_entry_type
Definition: fs.h:27
int fs_seek(struct fs_file_t *zfp, off_t offset, int whence)
Seek file.
int fs_stat(const char *path, struct fs_dirent *entry)
File or directory status.
int fs_register(int type, const struct fs_file_system_t *fs)
Register a file system.
int fs_open(struct fs_file_t *zfp, const char *file_name, fs_mode_t flags)
Open or create file.
ssize_t fs_write(struct fs_file_t *zfp, const void *ptr, size_t size)
Write file.
int fs_closedir(struct fs_dir_t *zdp)
Directory close.
int fs_readmount(int *index, const char **name)
Get path of mount point at index.
int fs_readdir(struct fs_dir_t *zdp, struct fs_dirent *entry)
Directory read entry.
int fs_unlink(const char *path)
Unlink file.
ssize_t fs_read(struct fs_file_t *zfp, void *ptr, size_t size)
Read file.
int fs_unmount(struct fs_mount_t *mp)
Unmount filesystem.
int fs_sync(struct fs_file_t *zfp)
Flush cached write data buffers of an open file.
static void fs_dir_t_init(struct fs_dir_t *zdp)
Initialize fs_dir_t object.
Definition: fs.h:238
static void fs_file_t_init(struct fs_file_t *zfp)
Initialize fs_file_t object.
Definition: fs.h:224
int fs_truncate(struct fs_file_t *zfp, off_t length)
Truncate or extend an open file to a given size.
@ FS_LITTLEFS
Definition: fs.h:53
@ FS_TYPE_EXTERNAL_BASE
Definition: fs.h:56
@ FS_FATFS
Definition: fs.h:50
@ FS_DIR_ENTRY_DIR
Definition: fs.h:31
@ FS_DIR_ENTRY_FILE
Definition: fs.h:29
flags
Definition: http_parser.h:131
__SIZE_TYPE__ ssize_t
Definition: types.h:28
__INTPTR_TYPE__ off_t
Definition: types.h:36
void * ptr
Definition: printk.c:111
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
Directory object representing an open directory.
Definition: fs_interface.h:67
Structure to receive file or directory information.
Definition: fs.h:115
enum fs_dir_entry_type type
Definition: fs.h:116
size_t size
Definition: fs.h:118
char name[MAX_FILE_NAME+1]
Definition: fs.h:117
File System interface structure.
Definition: fs_sys.h:42
File object representing an open file.
Definition: fs_interface.h:53
File system mount info structure.
Definition: fs.h:91
const struct fs_file_system_t * fs
Definition: fs.h:99
const char * mnt_point
Definition: fs.h:94
void * storage_dev
Definition: fs.h:96
void * fs_data
Definition: fs.h:95
int type
Definition: fs.h:93
size_t mountp_len
Definition: fs.h:98
uint8_t flags
Definition: fs.h:100
sys_dnode_t node
Definition: fs.h:92
Structure to receive volume statistics.
Definition: fs.h:132
unsigned long f_bsize
Definition: fs.h:133
unsigned long f_frsize
Definition: fs.h:134
unsigned long f_blocks
Definition: fs.h:135
unsigned long f_bfree
Definition: fs.h:136
Definition: stat.h:39