1 /*-------------------------------------------------------------------------
4 * Management of large buffered temporary files.
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.
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
18 * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
19 * Portions Copyright (c) 1994, Regents of the University of California
21 * src/include/storage/buffile.h
23 *-------------------------------------------------------------------------
29 #include "storage/fileset.h"
31 /* BufFile is an opaque type whose details are not known outside buffile.c. */
33 typedef struct BufFile BufFile
;
36 * prototypes for functions in buffile.c
39 extern BufFile
*BufFileCreateTemp(bool interXact
);
40 extern void BufFileClose(BufFile
*file
);
41 extern pg_nodiscard
size_t BufFileRead(BufFile
*file
, void *ptr
, size_t size
);
42 extern void BufFileReadExact(BufFile
*file
, void *ptr
, size_t size
);
43 extern size_t BufFileReadMaybeEOF(BufFile
*file
, void *ptr
, size_t size
, bool eofOK
);
44 extern void BufFileWrite(BufFile
*file
, const void *ptr
, size_t size
);
45 extern int BufFileSeek(BufFile
*file
, int fileno
, off_t offset
, int whence
);
46 extern void BufFileTell(BufFile
*file
, int *fileno
, off_t
*offset
);
47 extern int BufFileSeekBlock(BufFile
*file
, int64 blknum
);
48 extern int64
BufFileSize(BufFile
*file
);
49 extern int64
BufFileAppend(BufFile
*target
, BufFile
*source
);
51 extern BufFile
*BufFileCreateFileSet(FileSet
*fileset
, const char *name
);
52 extern void BufFileExportFileSet(BufFile
*file
);
53 extern BufFile
*BufFileOpenFileSet(FileSet
*fileset
, const char *name
,
54 int mode
, bool missing_ok
);
55 extern void BufFileDeleteFileSet(FileSet
*fileset
, const char *name
,
57 extern void BufFileTruncateFileSet(BufFile
*file
, int fileno
, off_t offset
);
59 #endif /* BUFFILE_H */