/* * Copyright (c) 2020 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_FS_FS_SYS_H_ #define ZEPHYR_INCLUDE_FS_FS_SYS_H_ #ifdef __cplusplus extern "C" { #endif /** * @ingroup file_system_api * @{ */ /** * @brief File System interface structure */ struct fs_file_system_t { /** * @name File operations * @{ */ /** * Opens or creates a file, depending on flags given. * * @param filp File to open/create. * @param fs_path Path to the file. * @param flags Flags for opening/creating the file. * @return 0 on success, negative errno code on fail. */ int (*open)(struct fs_file_t *filp, const char *fs_path, fs_mode_t flags); /** * Reads nbytes number of bytes. * * @param filp File to read from. * @param dest Destination buffer. * @param nbytes Number of bytes to read. * @return Number of bytes read on success, negative errno code on fail. */ ssize_t (*read)(struct fs_file_t *filp, void *dest, size_t nbytes); /** * Writes nbytes number of bytes. * * @param filp File to write to. * @param src Source buffer. * @param nbytes Number of bytes to write. * @return Number of bytes written on success, negative errno code on fail. */ ssize_t (*write)(struct fs_file_t *filp, const void *src, size_t nbytes); /** * Moves the file position to a new location in the file. * * @param filp File to move. * @param off Relative offset from the position specified by whence. * @param whence Position in the file. Possible values: SEEK_CUR, SEEK_SET, SEEK_END. * @return New position in the file or negative errno code on fail. */ int (*lseek)(struct fs_file_t *filp, off_t off, int whence); /** * Retrieves the current position in the file. * * @param filp File to get the current position from. * @return Current position in the file or negative errno code on fail. */ off_t (*tell)(struct fs_file_t *filp); /** * Truncates/expands the file to the new length. * * @param filp File to truncate/expand. * @param length New length of the file. * @return 0 on success, negative errno code on fail. */ int (*truncate)(struct fs_file_t *filp, off_t length); /** * Flushes the cache of an open file. * * @param filp File to flush. * @return 0 on success, negative errno code on fail. */ int (*sync)(struct fs_file_t *filp); /** * Flushes the associated stream and closes the file. * * @param filp File to close. * @return 0 on success, negative errno code on fail. */ int (*close)(struct fs_file_t *filp); /** @} */ /** * @name Directory operations * @{ */ /** * Opens an existing directory specified by the path. * * @param dirp Directory to open. * @param fs_path Path to the directory. * @return 0 on success, negative errno code on fail. */ int (*opendir)(struct fs_dir_t *dirp, const char *fs_path); /** * Reads directory entries of an open directory. * * @param dirp Directory to read from. * @param entry Next directory entry in the dirp directory. * @return 0 on success, negative errno code on fail. */ int (*readdir)(struct fs_dir_t *dirp, struct fs_dirent *entry); /** * Closes an open directory. * * @param dirp Directory to close. * @return 0 on success, negative errno code on fail. */ int (*closedir)(struct fs_dir_t *dirp); /** @} */ /** * @name File system level operations * @{ */ /** * Mounts a file system. * * @param mountp Mount point. * @return 0 on success, negative errno code on fail. */ int (*mount)(struct fs_mount_t *mountp); /** * Unmounts a file system. * * @param mountp Mount point. * @return 0 on success, negative errno code on fail. */ int (*unmount)(struct fs_mount_t *mountp); /** * Deletes the specified file or directory. * * @param mountp Mount point. * @param name Path to the file or directory to delete. * @return 0 on success, negative errno code on fail. */ int (*unlink)(struct fs_mount_t *mountp, const char *name); /** * Renames a file or directory. * * @param mountp Mount point. * @param from Path to the file or directory to rename. * @param to New name of the file or directory. * @return 0 on success, negative errno code on fail. */ int (*rename)(struct fs_mount_t *mountp, const char *from, const char *to); /** * Creates a new directory using specified path. * * @param mountp Mount point. * @param name Path to the directory to create. * @return 0 on success, negative errno code on fail. */ int (*mkdir)(struct fs_mount_t *mountp, const char *name); /** * Checks the status of a file or directory specified by the path. * * @param mountp Mount point. * @param path Path to the file or directory. * @param entry Directory entry. * @return 0 on success, negative errno code on fail. */ int (*stat)(struct fs_mount_t *mountp, const char *path, struct fs_dirent *entry); /** * Returns the total and available space on the file system volume. * * @param mountp Mount point. * @param path Path to the file or directory. * @param stat File system statistics. * @return 0 on success, negative errno code on fail. */ int (*statvfs)(struct fs_mount_t *mountp, const char *path, struct fs_statvfs *stat); #if defined(CONFIG_FILE_SYSTEM_MKFS) || defined(__DOXYGEN__) /** * Formats a device to specified file system type. * Available only if @kconfig{CONFIG_FILE_SYSTEM_MKFS} is enabled. * * @param dev_id Device identifier. * @param cfg File system configuration. * @param flags Formatting flags. * @return 0 on success, negative errno code on fail. * * @note This operation destroys existing data on the target device. */ int (*mkfs)(uintptr_t dev_id, void *cfg, int flags); #endif /** @} */ }; /** * @} */ #ifdef __cplusplus } #endif #endif /* ZEPHYR_INCLUDE_FS_FS_SYS_H_ */