xref: /nrf52832-nimble/rt-thread/components/dfs/include/dfs_file.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2005-01-26     Bernard      The first version.
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #ifndef __DFS_FILE_H__
12*10465441SEvalZero #define __DFS_FILE_H__
13*10465441SEvalZero 
14*10465441SEvalZero #include <dfs.h>
15*10465441SEvalZero #include <dfs_fs.h>
16*10465441SEvalZero 
17*10465441SEvalZero #ifdef __cplusplus
18*10465441SEvalZero extern "C" {
19*10465441SEvalZero #endif
20*10465441SEvalZero 
21*10465441SEvalZero struct rt_pollreq;
22*10465441SEvalZero 
23*10465441SEvalZero struct dfs_file_ops
24*10465441SEvalZero {
25*10465441SEvalZero     int (*open)     (struct dfs_fd *fd);
26*10465441SEvalZero     int (*close)    (struct dfs_fd *fd);
27*10465441SEvalZero     int (*ioctl)    (struct dfs_fd *fd, int cmd, void *args);
28*10465441SEvalZero     int (*read)     (struct dfs_fd *fd, void *buf, size_t count);
29*10465441SEvalZero     int (*write)    (struct dfs_fd *fd, const void *buf, size_t count);
30*10465441SEvalZero     int (*flush)    (struct dfs_fd *fd);
31*10465441SEvalZero     int (*lseek)    (struct dfs_fd *fd, off_t offset);
32*10465441SEvalZero     int (*getdents) (struct dfs_fd *fd, struct dirent *dirp, uint32_t count);
33*10465441SEvalZero 
34*10465441SEvalZero     int (*poll)     (struct dfs_fd *fd, struct rt_pollreq *req);
35*10465441SEvalZero };
36*10465441SEvalZero 
37*10465441SEvalZero /* file descriptor */
38*10465441SEvalZero #define DFS_FD_MAGIC     0xfdfd
39*10465441SEvalZero struct dfs_fd
40*10465441SEvalZero {
41*10465441SEvalZero     uint16_t magic;              /* file descriptor magic number */
42*10465441SEvalZero     uint16_t type;               /* Type (regular or socket) */
43*10465441SEvalZero 
44*10465441SEvalZero     char *path;                  /* Name (below mount point) */
45*10465441SEvalZero     int ref_count;               /* Descriptor reference count */
46*10465441SEvalZero 
47*10465441SEvalZero     struct dfs_filesystem *fs;
48*10465441SEvalZero     const struct dfs_file_ops *fops;
49*10465441SEvalZero 
50*10465441SEvalZero     uint32_t flags;              /* Descriptor flags */
51*10465441SEvalZero     size_t   size;               /* Size in bytes */
52*10465441SEvalZero     off_t    pos;                /* Current file position */
53*10465441SEvalZero 
54*10465441SEvalZero     void *data;                  /* Specific file system data */
55*10465441SEvalZero };
56*10465441SEvalZero 
57*10465441SEvalZero int dfs_file_open(struct dfs_fd *fd, const char *path, int flags);
58*10465441SEvalZero int dfs_file_close(struct dfs_fd *fd);
59*10465441SEvalZero int dfs_file_ioctl(struct dfs_fd *fd, int cmd, void *args);
60*10465441SEvalZero int dfs_file_read(struct dfs_fd *fd, void *buf, size_t len);
61*10465441SEvalZero int dfs_file_getdents(struct dfs_fd *fd, struct dirent *dirp, size_t nbytes);
62*10465441SEvalZero int dfs_file_unlink(const char *path);
63*10465441SEvalZero int dfs_file_write(struct dfs_fd *fd, const void *buf, size_t len);
64*10465441SEvalZero int dfs_file_flush(struct dfs_fd *fd);
65*10465441SEvalZero int dfs_file_lseek(struct dfs_fd *fd, off_t offset);
66*10465441SEvalZero 
67*10465441SEvalZero int dfs_file_stat(const char *path, struct stat *buf);
68*10465441SEvalZero int dfs_file_rename(const char *oldpath, const char *newpath);
69*10465441SEvalZero 
70*10465441SEvalZero #ifdef __cplusplus
71*10465441SEvalZero }
72*10465441SEvalZero #endif
73*10465441SEvalZero 
74*10465441SEvalZero #endif
75