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
 |