1 | /* Copyright (C) 1996-2016 Free Software Foundation, Inc. |
2 | This file is part of the GNU C Library. |
3 | |
4 | The GNU C Library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public |
6 | License as published by the Free Software Foundation; either |
7 | version 2.1 of the License, or (at your option) any later version. |
8 | |
9 | The GNU C Library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | Lesser General Public License for more details. |
13 | |
14 | You should have received a copy of the GNU Lesser General Public |
15 | License along with the GNU C Library; if not, see |
16 | <http://www.gnu.org/licenses/>. */ |
17 | |
18 | #if !defined _SYS_UIO_H && !defined _FCNTL_H |
19 | # error "Never include <bits/uio.h> directly; use <sys/uio.h> instead." |
20 | #endif |
21 | |
22 | #ifndef _BITS_UIO_H |
23 | #define _BITS_UIO_H 1 |
24 | |
25 | #include <sys/types.h> |
26 | |
27 | |
28 | /* We should normally use the Linux kernel header file to define this |
29 | type and macros but this calls for trouble because of the header |
30 | includes other kernel headers. */ |
31 | |
32 | /* Size of object which can be written atomically. |
33 | |
34 | This macro has different values in different kernel versions. The |
35 | latest versions of the kernel use 1024 and this is good choice. Since |
36 | the C library implementation of readv/writev is able to emulate the |
37 | functionality even if the currently running kernel does not support |
38 | this large value the readv/writev call will not fail because of this. */ |
39 | #define UIO_MAXIOV 1024 |
40 | |
41 | |
42 | /* Structure for scatter/gather I/O. */ |
43 | struct iovec |
44 | { |
45 | void *iov_base; /* Pointer to data. */ |
46 | size_t iov_len; /* Length of data. */ |
47 | }; |
48 | |
49 | #endif |
50 | |
51 | |
52 | #ifdef __USE_GNU |
53 | # if defined _SYS_UIO_H && !defined _BITS_UIO_H_FOR_SYS_UIO_H |
54 | # define _BITS_UIO_H_FOR_SYS_UIO_H 1 |
55 | |
56 | __BEGIN_DECLS |
57 | |
58 | /* Read from another process' address space. */ |
59 | extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec, |
60 | unsigned long int __liovcnt, |
61 | const struct iovec *__rvec, |
62 | unsigned long int __riovcnt, |
63 | unsigned long int __flags) |
64 | __THROW; |
65 | |
66 | /* Write to another process' address space. */ |
67 | extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, |
68 | unsigned long int __liovcnt, |
69 | const struct iovec *__rvec, |
70 | unsigned long int __riovcnt, |
71 | unsigned long int __flags) |
72 | __THROW; |
73 | |
74 | __END_DECLS |
75 | |
76 | # endif |
77 | #endif |
78 | |