#include <limits.h>
#include <sys/uio.h>
#include <unistd.h>
Go to the source code of this file.
|
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) |
|
◆ PG_IOV_MAX
#define PG_IOV_MAX Min(IOV_MAX, 128) |
◆ pg_preadv()
static ssize_t pg_preadv |
( |
int |
fd, |
|
|
const struct iovec * |
iov, |
|
|
int |
iovcnt, |
|
|
off_t |
offset |
|
) |
| |
|
inlinestatic |
Definition at line 48 of file pg_iovec.h.
49{
50#if HAVE_DECL_PREADV
51
52
53
54
55 if (iovcnt == 1)
56 return pread(
fd, iov[0].iov_base, iov[0].iov_len, offset);
57 else
58 return preadv(
fd, iov, iovcnt, offset);
59#else
60 ssize_t sum = 0;
61 ssize_t part;
62
63 for (
int i = 0;
i < iovcnt; ++
i)
64 {
65 part =
pg_pread(
fd, iov[
i].iov_base, iov[
i].iov_len, offset);
66 if (part < 0)
67 {
69 return -1;
70 else
71 return sum;
72 }
73 sum += part;
74 offset += part;
75 if ((
size_t) part < iov[
i].iov_len)
76 return sum;
77 }
78 return sum;
79#endif
80}
static int fd(const char *x, int i)
References fd(), i, and pg_pread.
Referenced by FileReadV(), and pgaio_io_perform_synchronously().
◆ pg_pwritev()
static ssize_t pg_pwritev |
( |
int |
fd, |
|
|
const struct iovec * |
iov, |
|
|
int |
iovcnt, |
|
|
off_t |
offset |
|
) |
| |
|
inlinestatic |
Definition at line 87 of file pg_iovec.h.
88{
89#if HAVE_DECL_PWRITEV
90
91
92
93
94 if (iovcnt == 1)
95 return pwrite(
fd, iov[0].iov_base, iov[0].iov_len, offset);
96 else
97 return pwritev(
fd, iov, iovcnt, offset);
98#else
99 ssize_t sum = 0;
100 ssize_t part;
101
102 for (
int i = 0;
i < iovcnt; ++
i)
103 {
104 part =
pg_pwrite(
fd, iov[
i].iov_base, iov[
i].iov_len, offset);
105 if (part < 0)
106 {
108 return -1;
109 else
110 return sum;
111 }
112 sum += part;
113 offset += part;
114 if ((
size_t) part < iov[
i].iov_len)
115 return sum;
116 }
117 return sum;
118#endif
119}
References fd(), i, and pg_pwrite.
Referenced by FileWriteV(), pg_pwritev_with_retry(), and pgaio_io_perform_synchronously().