Linux: support for file operations
The functions you are asking for do indeed fall into several categories: file stream I / O ( fopen
, fread
etc.), low level I / O file descriptor ( open
, read
etc.), and file system / directory management ( chown
, mkdir
etc.).
For an overview of the file stream I / O functions, see man stdio
.
For a google search try "posix file api" instead of "linux file operations".
You can also check the GNU C Libary Manual :
source to share
I'm not sure if this helps, but this is straight from the kernel source:
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
};
Filesystems usually register all of their implementations for these callbacks.
source to share
There are several file operation APIs at different levels of the stack, for example. POSIX API, Standard C AP I, Linux VFS API (as Jeremy mentioned), and FUSE API . All APIs do more or less the same thing, but the details are very different.
- fopen and fread are members of standard C (stream) file operations. Links: GNU Documentation
- mkdir is a member of the POSIX API. Links: OpenGroup Definition , GNU Documentation
These two APIs are the most important for the average user.
Good book on "Advanced UNIX Programming" by Stevens and Rago
source to share