file.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Wrapper functions for accessing the file_struct fd array.
  3.  */
  4. #ifndef __LINUX_FILE_H
  5. #define __LINUX_FILE_H
  6. extern void FASTCALL(fput(struct file *));
  7. extern struct file * FASTCALL(fget(unsigned int fd));
  8.  
  9. static inline int get_close_on_exec(unsigned int fd)
  10. {
  11. struct files_struct *files = current->files;
  12. int res;
  13. read_lock(&files->file_lock);
  14. res = FD_ISSET(fd, files->close_on_exec);
  15. read_unlock(&files->file_lock);
  16. return res;
  17. }
  18. static inline void set_close_on_exec(unsigned int fd, int flag)
  19. {
  20. struct files_struct *files = current->files;
  21. write_lock(&files->file_lock);
  22. if (flag)
  23. FD_SET(fd, files->close_on_exec);
  24. else
  25. FD_CLR(fd, files->close_on_exec);
  26. write_unlock(&files->file_lock);
  27. }
  28. static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
  29. {
  30. struct file * file = NULL;
  31. if (fd < files->max_fds)
  32. file = files->fd[fd];
  33. return file;
  34. }
  35. /*
  36.  * Check whether the specified fd has an open file.
  37.  */
  38. static inline struct file * fcheck(unsigned int fd)
  39. {
  40. struct file * file = NULL;
  41. struct files_struct *files = current->files;
  42. if (fd < files->max_fds)
  43. file = files->fd[fd];
  44. return file;
  45. }
  46. extern void put_filp(struct file *);
  47. extern int get_unused_fd(void);
  48. static inline void __put_unused_fd(struct files_struct *files, unsigned int fd)
  49. {
  50. FD_CLR(fd, files->open_fds);
  51. if (fd < files->next_fd)
  52. files->next_fd = fd;
  53. }
  54. static inline void put_unused_fd(unsigned int fd)
  55. {
  56. struct files_struct *files = current->files;
  57. write_lock(&files->file_lock);
  58. __put_unused_fd(files, fd);
  59. write_unlock(&files->file_lock);
  60. }
  61. void fd_install(unsigned int fd, struct file * file);
  62. void put_files_struct(struct files_struct *fs);
  63. #endif /* __LINUX_FILE_H */