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-2019, 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 | |