linux/include/linux/file.h
<<
>>
Prefs
   1/*
   2 * Wrapper functions for accessing the file_struct fd array.
   3 */
   4
   5#ifndef __LINUX_FILE_H
   6#define __LINUX_FILE_H
   7
   8#include <asm/atomic.h>
   9#include <linux/posix_types.h>
  10#include <linux/compiler.h>
  11#include <linux/spinlock.h>
  12
  13/*
  14 * The default fd array needs to be at least BITS_PER_LONG,
  15 * as this is the granularity returned by copy_fdset().
  16 */
  17#define NR_OPEN_DEFAULT BITS_PER_LONG
  18
  19/*
  20 * Open file table structure
  21 */
  22struct files_struct {
  23        atomic_t count;
  24        spinlock_t file_lock;     /* Protects all the below members.  Nests inside tsk->alloc_lock */
  25        int max_fds;
  26        int max_fdset;
  27        int next_fd;
  28        struct file ** fd;      /* current fd array */
  29        fd_set *close_on_exec;
  30        fd_set *open_fds;
  31        fd_set close_on_exec_init;
  32        fd_set open_fds_init;
  33        struct file * fd_array[NR_OPEN_DEFAULT];
  34};
  35
  36extern void FASTCALL(__fput(struct file *));
  37extern void FASTCALL(fput(struct file *));
  38
  39static inline void fput_light(struct file *file, int fput_needed)
  40{
  41        if (unlikely(fput_needed))
  42                fput(file);
  43}
  44
  45extern struct file * FASTCALL(fget(unsigned int fd));
  46extern struct file * FASTCALL(fget_light(unsigned int fd, int *fput_needed));
  47extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag));
  48extern void put_filp(struct file *);
  49extern int get_unused_fd(void);
  50extern void FASTCALL(put_unused_fd(unsigned int fd));
  51struct kmem_cache_s;
  52extern void filp_ctor(void * objp, struct kmem_cache_s *cachep, unsigned long cflags);
  53extern void filp_dtor(void * objp, struct kmem_cache_s *cachep, unsigned long dflags);
  54
  55extern struct file ** alloc_fd_array(int);
  56extern void free_fd_array(struct file **, int);
  57
  58extern fd_set *alloc_fdset(int);
  59extern void free_fdset(fd_set *, int);
  60
  61extern int expand_files(struct files_struct *, int nr);
  62
  63static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
  64{
  65        struct file * file = NULL;
  66
  67        if (fd < files->max_fds)
  68                file = files->fd[fd];
  69        return file;
  70}
  71
  72/*
  73 * Check whether the specified fd has an open file.
  74 */
  75#define fcheck(fd)      fcheck_files(current->files, fd)
  76
  77extern void FASTCALL(fd_install(unsigned int fd, struct file * file));
  78
  79struct task_struct;
  80
  81struct files_struct *get_files_struct(struct task_struct *);
  82void FASTCALL(put_files_struct(struct files_struct *fs));
  83
  84#endif /* __LINUX_FILE_H */
  85
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.