75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  |  * Copyright (c) 2006-2018, RT-Thread Development Team | ||
|  |  * | ||
|  |  * SPDX-License-Identifier: Apache-2.0 | ||
|  |  * | ||
|  |  * Change Logs: | ||
|  |  * Date           Author       Notes | ||
|  |  * 2005-01-26     Bernard      The first version. | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef __DFS_FILE_H__
 | ||
|  | #define __DFS_FILE_H__
 | ||
|  | 
 | ||
|  | #include <dfs.h>
 | ||
|  | #include <dfs_fs.h>
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | struct rt_pollreq; | ||
|  | 
 | ||
|  | struct dfs_file_ops | ||
|  | { | ||
|  |     int (*open)     (struct dfs_fd *fd); | ||
|  |     int (*close)    (struct dfs_fd *fd); | ||
|  |     int (*ioctl)    (struct dfs_fd *fd, int cmd, void *args); | ||
|  |     int (*read)     (struct dfs_fd *fd, void *buf, size_t count); | ||
|  |     int (*write)    (struct dfs_fd *fd, const void *buf, size_t count); | ||
|  |     int (*flush)    (struct dfs_fd *fd); | ||
|  |     int (*lseek)    (struct dfs_fd *fd, off_t offset); | ||
|  |     int (*getdents) (struct dfs_fd *fd, struct dirent *dirp, uint32_t count); | ||
|  | 
 | ||
|  |     int (*poll)     (struct dfs_fd *fd, struct rt_pollreq *req); | ||
|  | }; | ||
|  | 
 | ||
|  | /* file descriptor */ | ||
|  | #define DFS_FD_MAGIC     0xfdfd
 | ||
|  | struct dfs_fd | ||
|  | { | ||
|  |     uint16_t magic;              /* file descriptor magic number */ | ||
|  |     uint16_t type;               /* Type (regular or socket) */ | ||
|  | 
 | ||
|  |     char *path;                  /* Name (below mount point) */ | ||
|  |     int ref_count;               /* Descriptor reference count */ | ||
|  | 
 | ||
|  |     struct dfs_filesystem *fs; | ||
|  |     const struct dfs_file_ops *fops; | ||
|  | 
 | ||
|  |     uint32_t flags;              /* Descriptor flags */ | ||
|  |     size_t   size;               /* Size in bytes */ | ||
|  |     off_t    pos;                /* Current file position */ | ||
|  | 
 | ||
|  |     void *data;                  /* Specific file system data */ | ||
|  | }; | ||
|  | 
 | ||
|  | int dfs_file_open(struct dfs_fd *fd, const char *path, int flags); | ||
|  | int dfs_file_close(struct dfs_fd *fd); | ||
|  | int dfs_file_ioctl(struct dfs_fd *fd, int cmd, void *args); | ||
|  | int dfs_file_read(struct dfs_fd *fd, void *buf, size_t len); | ||
|  | int dfs_file_getdents(struct dfs_fd *fd, struct dirent *dirp, size_t nbytes); | ||
|  | int dfs_file_unlink(const char *path); | ||
|  | int dfs_file_write(struct dfs_fd *fd, const void *buf, size_t len); | ||
|  | int dfs_file_flush(struct dfs_fd *fd); | ||
|  | int dfs_file_lseek(struct dfs_fd *fd, off_t offset); | ||
|  | 
 | ||
|  | int dfs_file_stat(const char *path, struct stat *buf); | ||
|  | int dfs_file_rename(const char *oldpath, const char *newpath); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif
 |