text: /*-------------------------------------------------------------------------
   *
   * buffile.h
   *	  Management of large buffered files, primarily temporary files.
   *
   * The BufFile routines provide a partial replacement for stdio atop
   * virtual file descriptors managed by fd.c.  Currently they only support
   * buffered access to a virtual file, without any of stdio's formatting
   * features.  That's enough for immediate needs, but the set of facilities
   * could be expanded if necessary.
   *
   * BufFile also supports working with temporary files that exceed the OS
   * file size limit and/or the largest offset representable in an int.
   * It might be better to split that out as a separately accessible module,
   * but currently we have no need for oversize temp files without buffered
   * access.
   *
   * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * $PostgreSQL: pgsql/src/include/storage/buffile.h,v 1.25 2009/01/01 17:24:01 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
  
  #ifndef BUFFILE_H
  #define BUFFILE_H
  
  /* BufFile is an opaque type whose details are not known outside buffile.c. */
  
  typedef struct BufFile BufFile;
  
  /*
   * prototypes for functions in buffile.c
   */
  
  extern BufFile *BufFileCreateTemp(bool interXact);
  extern void BufFileClose(BufFile *file);
  extern size_t BufFileRead(BufFile *file, void *ptr, size_t size);
  extern size_t BufFileWrite(BufFile *file, void *ptr, size_t size);
  extern int	BufFileSeek(BufFile *file, int fileno, off_t offset, int whence);
  extern void BufFileTell(BufFile *file, int *fileno, off_t *offset);
  extern int	BufFileSeekBlock(BufFile *file, long blknum);
  
  #endif   /* BUFFILE_H */
  