Difference between revisions of "Contiki Coffee File System"
From Contiki
(→= Data Structure +) |
(→Coffee File System Open File) |
||
Line 15: | Line 15: | ||
== Coffee File System Open File == | == Coffee File System Open File == | ||
− | === Data Structure === | + | === Data Structure Used In The System=== |
+ | <source lang="c"> | ||
+ | struct file_desc { | ||
+ | cfs_offset_t offset; | ||
+ | struct file *file; | ||
+ | uint8_t flags; | ||
+ | #if COFFEE_IO_SEMANTICS | ||
+ | uint8_t io_flags; | ||
+ | #endif | ||
+ | }; | ||
+ | </source> | ||
+ | |||
+ | <source lang="c"> | ||
+ | struct file_desc coffee_fd_set[COFFEE_FD_SET_SIZE]; | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
<source lang="c"> | <source lang="c"> |
Revision as of 15:55, 8 November 2014
Contents
Introduction
This tutorial is a introduction to cfs_open function of Coffee file system on Contiki OS 2.7.
You Will Learn
Through this tutorial you will learn about how the Coffee file system works.
Source Code
~/contiki-2.7/core/cfs/cfs-coffee.h ~/contiki-2.7/core/cfs/cfs-coffee.c
Coffee File System Open File
Data Structure Used In The System
struct file_desc {
cfs_offset_t offset;
struct file *file;
uint8_t flags;
#if COFFEE_IO_SEMANTICS
uint8_t io_flags;
#endif
};
struct file_desc coffee_fd_set[COFFEE_FD_SET_SIZE];
int
cfs_open(const char *name, int flags)
{
int fd;
struct file_desc *fdp;
fd = get_available_fd();
if(fd < 0) {
PRINTF("Coffee: Failed to allocate a new file descriptor!\n");
return -1;
}
fdp = &coffee_fd_set[fd];
fdp->flags = 0;
fdp->file = find_file(name);
if(fdp->file == NULL) {
if((flags & (CFS_READ | CFS_WRITE)) == CFS_READ) {
return -1;
}
fdp->file = reserve(name, page_count(COFFEE_DYN_SIZE), 1, 0);
if(fdp->file == NULL) {
return -1;
}
fdp->file->end = 0;
} else if(fdp->file->end == UNKNOWN_OFFSET) {
fdp->file->end = file_end(fdp->file->page);
}
fdp->flags |= flags;
fdp->offset = flags & CFS_APPEND ? fdp->file->end : 0;
fdp->file->references++;
return fd;
}