1 /*------------------------------------------------------------------------- 2 * 3 * buffile.h 4 * Management of large buffered temporary files. 5 * 6 * The BufFile routines provide a partial replacement for stdio atop 7 * virtual file descriptors managed by fd.c. Currently they only support 8 * buffered access to a virtual file, without any of stdio's formatting 9 * features. That's enough for immediate needs, but the set of facilities 10 * could be expanded if necessary. 11 * 12 * BufFile also supports working with temporary files that exceed the OS 13 * file size limit and/or the largest offset representable in an int. 14 * It might be better to split that out as a separately accessible module, 15 * but currently we have no need for oversize temp files without buffered 16 * access. 17 * 18 * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group 19 * Portions Copyright (c) 1994, Regents of the University of California 20 * 21 * src/include/storage/buffile.h 22 * 23 *------------------------------------------------------------------------- 24 */ 25 26 #ifndef BUFFILE_H 27 #define BUFFILE_H 28 29 #include "storage/sharedfileset.h" 30 31 /* BufFile is an opaque type whose details are not known outside buffile.c. */ 32 33 typedef struct BufFile BufFile; 34 35 /* 36 * prototypes for functions in buffile.c 37 */ 38 39 extern BufFile *BufFileCreateTemp(bool interXact); 40 extern void BufFileClose(BufFile *file); 41 extern size_t BufFileRead(BufFile *file, void *ptr, size_t size); 42 extern size_t BufFileWrite(BufFile *file, void *ptr, size_t size); 43 extern int BufFileSeek(BufFile *file, int fileno, off_t offset, int whence); 44 extern void BufFileTell(BufFile *file, int *fileno, off_t *offset); 45 extern int BufFileSeekBlock(BufFile *file, long blknum); 46 extern int64 BufFileSize(BufFile *file); 47 extern long BufFileAppend(BufFile *target, BufFile *source); 48 49 extern BufFile *BufFileCreateShared(SharedFileSet *fileset, const char *name); 50 extern void BufFileExportShared(BufFile *file); 51 extern BufFile *BufFileOpenShared(SharedFileSet *fileset, const char *name); 52 extern void BufFileDeleteShared(SharedFileSet *fileset, const char *name); 53 54 #endif /* BUFFILE_H */ 55