fd.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * fd.h
  4.  *   Virtual file descriptor definitions.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: fd.h,v 1.16 1999/05/26 12:56:53 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. /*
  14.  * calls:
  15.  *
  16.  * File {Close, Read, Write, Seek, Tell, Sync}
  17.  * {File Name Open, Allocate, Free} File
  18.  *
  19.  * These are NOT JUST RENAMINGS OF THE UNIX ROUTINES.
  20.  * Use them for all file activity...
  21.  *
  22.  * File fd;
  23.  * fd = FilePathOpenFile("foo", O_RDONLY);
  24.  *
  25.  * AllocateFile();
  26.  * FreeFile();
  27.  *
  28.  * Use AllocateFile, not fopen, if you need a stdio file (FILE*); then
  29.  * use FreeFile, not fclose, to close it.  AVOID using stdio for files
  30.  * that you intend to hold open for any length of time, since there is
  31.  * no way for them to share kernel file descriptors with other files.
  32.  *
  33.  * The BufFile routines provide a partial replacement for stdio.  Currently
  34.  * they only support buffered access to a virtual file, without any of
  35.  * stdio's formatting features.  That's enough for immediate needs, but
  36.  * the set of facilities could be expanded if necessary.
  37.  */
  38. #ifndef FD_H
  39. #define FD_H
  40. #include <stdio.h>
  41. /*
  42.  * FileSeek uses the standard UNIX lseek(2) flags.
  43.  */
  44. typedef char *FileName;
  45. typedef int File;
  46. /* BufFile is an opaque type whose details are not known outside fd.c. */
  47. typedef struct BufFile BufFile;
  48. /* why is this here? fd.c doesn't want it ... */
  49. struct pgstat
  50. { /* just the fields we need from stat
  51.  * structure */
  52. int st_ino;
  53. int st_mode;
  54. unsigned int st_size;
  55. unsigned int st_sizehigh; /* high order bits */
  56. /* 2^64 == 1.8 x 10^20 bytes */
  57. int st_uid;
  58. int st_atime_s; /* just the seconds */
  59. int st_mtime_s; /* since SysV and the new BSD both have */
  60. int st_ctime_s; /* usec fields.. */
  61. };
  62. /*
  63.  * prototypes for functions in fd.c
  64.  */
  65. /* Operations on virtual Files --- equivalent to Unix kernel file ops */
  66. extern File FileNameOpenFile(FileName fileName, int fileFlags, int fileMode);
  67. extern File PathNameOpenFile(FileName fileName, int fileFlags, int fileMode);
  68. extern File OpenTemporaryFile(void);
  69. extern void FileClose(File file);
  70. extern void FileUnlink(File file);
  71. extern int FileRead(File file, char *buffer, int amount);
  72. extern int FileWrite(File file, char *buffer, int amount);
  73. extern long FileSeek(File file, long offset, int whence);
  74. extern int FileTruncate(File file, int offset);
  75. extern int FileSync(File file);
  76. /* Operations that allow use of regular stdio --- USE WITH CAUTION */
  77. extern FILE *AllocateFile(char *name, char *mode);
  78. extern void FreeFile(FILE *);
  79. /* Operations on BufFiles --- a very incomplete emulation of stdio
  80.  * atop virtual Files...
  81.  */
  82. extern BufFile *BufFileCreate(File file);
  83. extern void BufFileClose(BufFile *file);
  84. extern size_t BufFileRead(BufFile *file, void *ptr, size_t size);
  85. extern size_t BufFileWrite(BufFile *file, void *ptr, size_t size);
  86. extern long BufFileSeek(BufFile *file, long offset, int whence);
  87. /* Miscellaneous support routines */
  88. extern int FileNameUnlink(char *filename);
  89. extern void closeAllVfds(void);
  90. extern void AtEOXact_Files(void);
  91. extern int pg_fsync(int fd);
  92. #endif  /* FD_H */