RTEMS CPU Kit with SuperCore  4.11.3
rtems-rfs-file.h
Go to the documentation of this file.
1 
13 /*
14  * COPYRIGHT (c) 2010 Chris Johns <chrisj@rtems.org>
15  *
16  * The license and distribution terms for this file may be
17  * found in the file LICENSE in this distribution or at
18  * http://www.rtems.org/license/LICENSE.
19  */
20 
21 #if !defined (_RTEMS_RFS_FILE_H_)
22 #define _RTEMS_RFS_FILE_H_
23 
24 #include <rtems/libio_.h>
25 
26 #include <rtems/rfs/rtems-rfs-block.h>
27 #include <rtems/rfs/rtems-rfs-data.h>
28 #include <rtems/rfs/rtems-rfs-file-system.h>
29 #include <rtems/rfs/rtems-rfs-inode.h>
30 
37 typedef struct _rtems_rfs_file_shared
38 {
43 
48 
53 
59 
65 
70 
75 
80 
86 
88 
96 static inline rtems_rfs_time
97 rtems_rfs_file_shared_get_atime (rtems_rfs_file_shared* shared)
98 {
99  return shared->atime;
100 }
101 
109 static inline rtems_rfs_time
110 rtems_rfs_file_shared_get_mtime (rtems_rfs_file_shared* shared)
111 {
112  return shared->mtime;
113 }
114 
122 static inline rtems_rfs_time
123 rtems_rfs_file_shared_get_ctime (rtems_rfs_file_shared* shared)
124 {
125  return shared->ctime;
126 }
127 
135 static inline uint32_t
136 rtems_rfs_file_shared_get_block_count (rtems_rfs_file_shared* shared)
137 {
138  return shared->size.count;
139 }
140 
148 static inline uint16_t
149 rtems_rfs_file_shared_get_block_offset (rtems_rfs_file_shared* shared)
150 {
151  return shared->size.offset;
152 }
153 
162 static inline rtems_rfs_pos
163 rtems_rfs_file_shared_get_size (rtems_rfs_file_system* fs,
164  rtems_rfs_file_shared* shared)
165 {
166  return rtems_rfs_block_get_size (fs, &shared->size);
167 }
168 
172 #define RTEMS_RFS_FILE_NO_ATIME_UPDATE (1 << 0)
175 #define RTEMS_RFS_FILE_NO_MTIME_UPDATE (1 << 1)
178 #define RTEMS_RFS_FILE_NO_LENGTH_UPDATE (1 << 2)
185 typedef struct _rtems_rfs_file_handle
186 {
190  int flags;
200  rtems_rfs_block_pos bpos;
205  rtems_rfs_file_shared* shared;
208 
212 #define rtems_rfs_file_data(_f) \
213  (rtems_rfs_buffer_data (&(_f)->buffer) + (_f)->bpos.boff)
214 
218 #define rtems_rfs_file_fs(_f) ((_f)->shared->fs)
219 
223 #define rtems_rfs_file_inode(_f) (&(_f)->shared->inode)
228 #define rtems_rfs_file_map(_f) (&(_f)->shared->map)
233 #define rtems_rfs_file_bpos(_f) (&(_f)->bpos)
238 #define rtems_rfs_file_block(_f) ((_f)->bpos.bno)
243 #define rtems_rfs_file_block_offset(_f) ((_f)->bpos.boff)
248 #define rtems_rfs_file_set_bpos(_f, _p) \
249  rtems_rfs_block_get_bpos (rtems_rfs_file_fs (_f), _p, (&(_f)->bpos))
250 
254 #define rtems_rfs_file_buffer(_f) (&(_f)->buffer)
255 
259 #define rtems_rfs_file_update_atime(_f) \
260  (((_f)->flags & RTEMS_RFS_FILE_NO_ATIME_UPDATE) == 0)
261 
265 #define rtems_rfs_file_update_mtime(_f) \
266  (((_f)->flags & RTEMS_RFS_FILE_NO_MTIME_UPDATE) == 0)
267 
271 #define rtems_rfs_file_update_length(_f) \
272  (((_f)->flags & RTEMS_RFS_FILE_NO_LENGTH_UPDATE) == 0)
273 
277 #define rtems_rfs_file_get_size(_f) \
278  (&(_f)->shared->size)
279 
283 #define rtems_rfs_file_size(_f) \
284  rtems_rfs_file_shared_get_size (rtems_rfs_file_fs (_f), (_f)->shared)
285 
289 #define rtems_rfs_file_size_count(_f) \
290  rtems_rfs_file_shared_get_block_count ((_f)->shared)
291 
295 #define rtems_rfs_file_size_offset(_f) \
296  rtems_rfs_file_shared_get_block_offset ((_f)->shared)
297 
309  rtems_rfs_ino ino,
310  int oflag,
311  rtems_rfs_file_handle** handle);
312 
323  rtems_rfs_file_handle* handle);
324 
342  size_t* available,
343  bool read);
344 
360  size_t size,
361  bool read);
362 
374 
387  rtems_rfs_pos pos,
388  rtems_rfs_pos* new_pos);
389 
401 
413  rtems_rfs_ino ino);
414 
415 
416 #endif
This is used to manage each element (node) which is placed on a chain.
Definition: chain.h:65
ssize_t read(int fd, void *buffer, size_t count)
POSIX 1003.1b 6.4.1 - Read From a File.
Definition: read.c:27
rtems_chain_node link
The shared parts are maintained as a list.
Definition: rtems-rfs-file.h:42
A block size is the number of blocks less one plus the offset where the offset must be less than the ...
Definition: rtems-rfs-block-pos.h:141
rtems_rfs_pos rtems_rfs_block_get_size(rtems_rfs_file_system *fs, rtems_rfs_block_size *size)
Calculate the position given the number of blocks and the offset.
Definition: rtems-rfs-block.c:78
int rtems_rfs_file_io_start(rtems_rfs_file_handle *handle, size_t *available, bool read)
Start I/O on a block of a file.
Definition: rtems-rfs-file.c:220
rtems_rfs_time atime
The access time.
Definition: rtems-rfs-file.h:69
rtems_rfs_file_shared * rtems_rfs_file_get_shared(rtems_rfs_file_system *fs, rtems_rfs_ino ino)
Return the shared file data for an ino.
Definition: rtems-rfs-file.c:619
rtems_rfs_time mtime
The modified time.
Definition: rtems-rfs-file.h:74
RFS File System data.
Definition: rtems-rfs-file-system.h:123
int rtems_rfs_file_set_size(rtems_rfs_file_handle *handle, rtems_rfs_pos size)
Set the size of the file to the new size.
Definition: rtems-rfs-file.c:469
uint64_t rtems_rfs_pos
Absolute position.
Definition: rtems-rfs-file-system.h:90
int rtems_rfs_file_seek(rtems_rfs_file_handle *handle, rtems_rfs_pos pos, rtems_rfs_pos *new_pos)
The file to the position returning the old position.
Definition: rtems-rfs-file.c:405
uint32_t rtems_rfs_ino
The inode number or ino.
Definition: rtems-rfs-inode.h:78
rtems_rfs_block_map map
The block map for the file.
Definition: rtems-rfs-file.h:58
rtems_rfs_block_off offset
The offset into the block.
Definition: rtems-rfs-block-pos.h:153
File data that is shared by various file handles accessing the same file.
Definition: rtems-rfs-file.h:37
int rtems_rfs_file_io_release(rtems_rfs_file_handle *handle)
Release the I/O resources without any changes.
Definition: rtems-rfs-file.c:395
RFS Inode Handle.
Definition: rtems-rfs-inode.h:181
File data used to managed an open file.
Definition: rtems-rfs-file.h:191
rtems_rfs_block_size size
The size of the file as taken from the inode.
Definition: rtems-rfs-file.h:64
A block position is a block number times the block size plus the offset.
Definition: rtems-rfs-block-pos.h:51
rtems_rfs_block_no count
The count of blocks in a map.
Definition: rtems-rfs-block-pos.h:147
A block map manges the block lists that originate from an inode.
Definition: rtems-rfs-block.h:92
rtems_rfs_file_system * fs
Hold a pointer to the file system data so users can take the handle and use it without the needing to...
Definition: rtems-rfs-file.h:85
int rtems_rfs_file_close(rtems_rfs_file_system *fs, rtems_rfs_file_handle *handle)
Close an open file handle.
Definition: rtems-rfs-file.c:143
rtems_rfs_time ctime
The change time.
Definition: rtems-rfs-file.h:79
LibIO Internal Interface.
rtems_rfs_inode_handle inode
The inode for the file.
Definition: rtems-rfs-file.h:52
uint32_t rtems_rfs_time
The time in the file system.
Definition: rtems-rfs-inode.h:83
int rtems_rfs_file_io_end(rtems_rfs_file_handle *handle, size_t size, bool read)
End the I/O.
Definition: rtems-rfs-file.c:308
struct _rtems_rfs_file_shared rtems_rfs_file_shared
File data that is shared by various file handles accessing the same file.
RFS Buffer handle.
Definition: rtems-rfs-buffer.h:91
int references
Reference count the users of this data.
Definition: rtems-rfs-file.h:47
int rtems_rfs_file_open(rtems_rfs_file_system *fs, rtems_rfs_ino ino, int oflag, rtems_rfs_file_handle **handle)
Open a file handle.
Definition: rtems-rfs-file.c:31
struct _rtems_rfs_file_handle rtems_rfs_file_handle
File data used to managed an open file.