• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved.
3  *
4  * UniProton is licensed under Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *          http://license.coscl.org.cn/MulanPSL2
8  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11  * See the Mulan PSL v2 for more details.
12  * Create: 2022-09-21
13  * Description: 文件系统vfs层
14  */
15 
16 #ifndef VFS_FILES_H
17 #define VFS_FILES_H
18 
19 #include "dirent.h"
20 #include "sys/stat.h"
21 #include "unistd.h"
22 #include "prt_fs.h"
23 
24 #define FILE_STATUS_NOT_USED 0
25 #define FILE_STATUS_INITING 1
26 #define FILE_STATUS_READY 2
27 #define FILE_STATUS_CLOSING 3
28 
29 struct TagFileOps;
30 struct TagFile;
31 struct TagDir;
32 struct TagMountPoint;
33 
34 struct TagFileOps {
35     S32     (*open)(struct TagFile *, const char *, S32);
36     S32     (*close)(struct TagFile *);
37     ssize_t (*read)(struct TagFile *, char *, size_t);
38     ssize_t (*write)(struct TagFile *, const char *, size_t);
39     off_t   (*lseek)(struct TagFile *, off_t, S32);
40     S32     (*stat)(struct TagMountPoint *, const char *, struct stat *);
41     S32     (*truncate)(struct TagFile *, off_t);
42     S32     (*unlink)(struct TagMountPoint *, const char *);
43     S32     (*rename)(struct TagMountPoint *, const char *, const char *);
44     S32     (*ioctl)(struct TagFile *, S32, uintptr_t);
45     S32     (*sync)(struct TagFile *);
46     S32     (*opendir)(struct TagDir *, const char *);
47     S32     (*readdir)(struct TagDir *, struct dirent *);
48     S32     (*closedir)(struct TagDir *);
49     S32     (*mkdir)(struct TagMountPoint *, const char *);
50     S32     (*rmdir)(struct TagMountPoint *, const char *);
51 };
52 
53 struct TagFile {
54     const struct TagFileOps *fFops;
55     U32                     fFlags;
56     U32                     fStatus;
57     off_t                   fOffset;
58     S32                     fOwner;
59     struct TagMountPoint    *fMp;
60     void                    *fData;
61     const char              *fullPath;
62 };
63 
64 struct TagDir {
65     struct TagMountPoint *dMp;
66     struct dirent        dDent;
67     off_t                dOffset;
68     void                 *dData;
69 };
70 
71 S32 OsFileToFd(struct TagFile *file);
72 struct TagFile *OsFdToFile(S32 fd);
73 struct TagFile *OsVfsGetFile(void);
74 struct TagFile *OsVfsGetFileSpec(S32 fd);
75 void OsVfsPutFile(struct TagFile *file);
76 
77 #endif /* VFS_FILES_H */
78