1 /*------------------------------------------------------------------------- 2 * 3 * buffile.h 4 * Management of large buffered files, primarily 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-2017, 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 /* BufFile is an opaque type whose details are not known outside buffile.c. */ 30 31 typedef struct BufFile BufFile; 32 33 /* 34 * prototypes for functions in buffile.c 35 */ 36 37 extern BufFile *BufFileCreateTemp(bool interXact); 38 extern void BufFileClose(BufFile *file); 39 extern size_t BufFileRead(BufFile *file, void *ptr, size_t size); 40 extern size_t BufFileWrite(BufFile *file, void *ptr, size_t size); 41 extern int BufFileSeek(BufFile *file, int fileno, off_t offset, int whence); 42 extern void BufFileTell(BufFile *file, int *fileno, off_t *offset); 43 extern int BufFileSeekBlock(BufFile *file, long blknum); 44 45 #endif /* BUFFILE_H */ 46