PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pg_iovec.h File Reference
#include <limits.h>
#include <sys/uio.h>
#include <unistd.h>
Include dependency graph for pg_iovec.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define PG_IOV_MAX   Min(IOV_MAX, 32)
 

Functions

static ssize_t pg_preadv (int fd, const struct iovec *iov, int iovcnt, off_t offset)
 
static ssize_t pg_pwritev (int fd, const struct iovec *iov, int iovcnt, off_t offset)
 

Macro Definition Documentation

◆ PG_IOV_MAX

#define PG_IOV_MAX   Min(IOV_MAX, 32)

Definition at line 37 of file pg_iovec.h.

Function Documentation

◆ pg_preadv()

static ssize_t pg_preadv ( int  fd,
const struct iovec *  iov,
int  iovcnt,
off_t  offset 
)
inlinestatic

Definition at line 44 of file pg_iovec.h.

45{
46#if HAVE_DECL_PREADV
47 /*
48 * Avoid a small amount of argument copying overhead in the kernel if
49 * there is only one iovec.
50 */
51 if (iovcnt == 1)
52 return pread(fd, iov[0].iov_base, iov[0].iov_len, offset);
53 else
54 return preadv(fd, iov, iovcnt, offset);
55#else
56 ssize_t sum = 0;
57 ssize_t part;
58
59 for (int i = 0; i < iovcnt; ++i)
60 {
61 part = pg_pread(fd, iov[i].iov_base, iov[i].iov_len, offset);
62 if (part < 0)
63 {
64 if (i == 0)
65 return -1;
66 else
67 return sum;
68 }
69 sum += part;
70 offset += part;
71 if ((size_t) part < iov[i].iov_len)
72 return sum;
73 }
74 return sum;
75#endif
76}
int i
Definition: isn.c:72
#define pg_pread
Definition: port.h:225
static int fd(const char *x, int i)
Definition: preproc-init.c:105

References fd(), i, and pg_pread.

Referenced by FileReadV().

◆ pg_pwritev()

static ssize_t pg_pwritev ( int  fd,
const struct iovec *  iov,
int  iovcnt,
off_t  offset 
)
inlinestatic

Definition at line 83 of file pg_iovec.h.

84{
85#if HAVE_DECL_PWRITEV
86 /*
87 * Avoid a small amount of argument copying overhead in the kernel if
88 * there is only one iovec.
89 */
90 if (iovcnt == 1)
91 return pwrite(fd, iov[0].iov_base, iov[0].iov_len, offset);
92 else
93 return pwritev(fd, iov, iovcnt, offset);
94#else
95 ssize_t sum = 0;
96 ssize_t part;
97
98 for (int i = 0; i < iovcnt; ++i)
99 {
100 part = pg_pwrite(fd, iov[i].iov_base, iov[i].iov_len, offset);
101 if (part < 0)
102 {
103 if (i == 0)
104 return -1;
105 else
106 return sum;
107 }
108 sum += part;
109 offset += part;
110 if ((size_t) part < iov[i].iov_len)
111 return sum;
112 }
113 return sum;
114#endif
115}
#define pg_pwrite
Definition: port.h:226

References fd(), i, and pg_pwrite.

Referenced by FileWriteV(), and pg_pwritev_with_retry().