diff options
author | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-12-28 03:13:31 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2017-01-14 18:31:49 +0100 |
commit | ae0bcade2ae104331974563c92fe62cf6ed7c975 (patch) | |
tree | 692082d07f6c10faaab41db22a75b7b3b1aa4ac1 | |
parent | fbd8eee2038f479845cb78891b96c7899ca5cb49 (diff) |
add wrappers for preadv/pwritev
-rw-r--r-- | include/sys/uio.h | 26 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/preadv.c | 26 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/pwritev.c | 26 |
3 files changed, 78 insertions, 0 deletions
diff --git a/include/sys/uio.h b/include/sys/uio.h index efc681e7b..78341ed40 100644 --- a/include/sys/uio.h +++ b/include/sys/uio.h @@ -48,6 +48,32 @@ extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count); __THROW. */ extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count); +#ifdef __USE_MISC +/* Read data from file descriptor FD at the given position OFFSET + without change the file pointer, and put the result in the buffers + described by IOVEC, which is a vector of COUNT 'struct iovec's. + The buffers are filled in the order specified. Operates just like + 'pread' (see <unistd.h>) except that data are put in IOVEC instead + of a contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, + __off_t __offset) __wur; + +/* Write data pointed by the buffers described by IOVEC, which is a + vector of COUNT 'struct iovec's, to file descriptor FD at the given + position OFFSET without change the file pointer. The data is + written in the order specified. Operates just like 'pwrite' (see + <unistd.h>) except that the data are taken from IOVEC instead of a + contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count, + __off_t __offset) __wur; +#endif /* Use misc. */ + __END_DECLS #endif /* sys/uio.h */ diff --git a/libc/sysdeps/linux/common/preadv.c b/libc/sysdeps/linux/common/preadv.c new file mode 100644 index 000000000..20adc6d6d --- /dev/null +++ b/libc/sysdeps/linux/common/preadv.c @@ -0,0 +1,26 @@ +/* Copyright (C) 2009-2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sys/uio.h> +#include <sys/syscall.h> +#include <unistd.h> + +ssize_t +preadv (int fd, const struct iovec *vector, int count, off_t offset) +{ + return INLINE_SYSCALL (preadv, 4, fd, vector, count, offset); +} diff --git a/libc/sysdeps/linux/common/pwritev.c b/libc/sysdeps/linux/common/pwritev.c new file mode 100644 index 000000000..cbc58f95d --- /dev/null +++ b/libc/sysdeps/linux/common/pwritev.c @@ -0,0 +1,26 @@ +/* Copyright (C) 2009-2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sys/uio.h> +#include <sys/syscall.h> +#include <unistd.h> + +ssize_t +pwritev (int fd, const struct iovec *vector, int count, off_t offset) +{ + return INLINE_SYSCALL (pwritev, 4, fd, vector, count, offset); +} |