FILE_TABLE
Section: Kernel Reference Guide (9)
Updated: July 11, 1993
Index
Return to Main Contents
NAME
file_table - detailed description of the table and table entry
SYNOPSIS
From #include <linux/fs.h>
struct file {
mode_t f_mode;
dev_t f_rdev; /* needed for /dev/tty */
off_t f_pos;
unsigned short f_flags;
unsigned short f_count;
unsigned short f_reada;
struct file *f_next, *f_prev;
struct inode *f_inode;
struct file_operations *f_op;
};
From linux/fs/file_table.c
struct file *first_file;
int nr_files = 0;
DESCRIPTION
The file table is fundamentally important to any UNIX system. It is
where all open files (Linux includes closed files as well) are stored
and managed by the kernel. For Linux, you can hardly do anything without
referencing it in some way.
Linux stores its file table as a double circular linked list. The
root pointer to the ``head'' of this list is first_file. Also, a count
of how many entries are in the file table is maintained, called nr_files.
Under this scheme, the file table for Linux could be as large memory could
hold. Unfortunately, this would be unmanageable in most cases. Your computer
would be in the kernel most of the time when processes are more important.
To keep this from happening,
nr_files
is tested against
NR_FILE
to limit the number of file table entries.
Understanding the Structure of the File Table
The file table is organized as a double circular linked list.
Imagine, a circle of people with everyone facing the same direction.
Each person is facing so that one arm is in the circle and the other
arm is outside the circle. Now, if each person put his or her right
hand on the
shoulder of the person in front of him or her and if each person touched
the person behind him or her with his or her left hand. You
have formed two
circles of arms, one inside and the other outside. The right arms represent
pointers to the next entry (or person). The left arms represent
pointers to the previous entry (or person).
The file structure, a file table entry
At first glance, a table entry looks quite simple. A entry contains
how a file was opened, what tty device, a reference count, pointers to
another entries, pointer to v-node (the vfs i-node) and filesystem
specific i-node information, etc.
- f_mode
-
After and'ing with O_ACCMODE, this is what bits 0 and 1 mean.
00 = no permissions needed
01 = read-permission
10 = write-permission
11 = read-write
- f_rdev
-
It is only used with tty lines. It contains the major and minor
numbers of the tty device.
- f_pos
-
The current position in a file, if meaningful.
- f_flags
-
Storage for the flags from open() and fcntl()
- f_count
-
Reference counter
- f_reada
-
This is a boolean variable where true means that an actual read is
needed.
- f_next, f_prev
-
Pointers to other entries
- f_inode
-
Pointer to v-node and fs specific i-node information
- f_op
-
Pointer to a file's operations
AUTHOR
Linus Torvalds
SEE ALSO
insert_file_free(9), remove_file_free(9), put_last_free(9)
grow_files(9), file_table_init(9), get_empty_filp(9)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- Understanding the Structure of the File Table
-
- The file structure, a file table entry
-
- AUTHOR
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 12:22:43 GMT, March 22, 2025