xref: /aosp_15_r20/bionic/libc/include/unistd.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * Copyright (C) 2008 The Android Open Source Project
3*8d67ca89SAndroid Build Coastguard Worker  * All rights reserved.
4*8d67ca89SAndroid Build Coastguard Worker  *
5*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
6*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
7*8d67ca89SAndroid Build Coastguard Worker  * are met:
8*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions of source code must retain the above copyright
9*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
10*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions in binary form must reproduce the above copyright
11*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in
12*8d67ca89SAndroid Build Coastguard Worker  *    the documentation and/or other materials provided with the
13*8d67ca89SAndroid Build Coastguard Worker  *    distribution.
14*8d67ca89SAndroid Build Coastguard Worker  *
15*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16*8d67ca89SAndroid Build Coastguard Worker  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17*8d67ca89SAndroid Build Coastguard Worker  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18*8d67ca89SAndroid Build Coastguard Worker  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19*8d67ca89SAndroid Build Coastguard Worker  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20*8d67ca89SAndroid Build Coastguard Worker  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21*8d67ca89SAndroid Build Coastguard Worker  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22*8d67ca89SAndroid Build Coastguard Worker  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23*8d67ca89SAndroid Build Coastguard Worker  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24*8d67ca89SAndroid Build Coastguard Worker  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25*8d67ca89SAndroid Build Coastguard Worker  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*8d67ca89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
27*8d67ca89SAndroid Build Coastguard Worker  */
28*8d67ca89SAndroid Build Coastguard Worker 
29*8d67ca89SAndroid Build Coastguard Worker #pragma once
30*8d67ca89SAndroid Build Coastguard Worker 
31*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h>
32*8d67ca89SAndroid Build Coastguard Worker 
33*8d67ca89SAndroid Build Coastguard Worker #include <stddef.h>
34*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h>
35*8d67ca89SAndroid Build Coastguard Worker #include <sys/select.h>
36*8d67ca89SAndroid Build Coastguard Worker 
37*8d67ca89SAndroid Build Coastguard Worker #include <bits/fcntl.h>
38*8d67ca89SAndroid Build Coastguard Worker #include <bits/getentropy.h>
39*8d67ca89SAndroid Build Coastguard Worker #include <bits/getopt.h>
40*8d67ca89SAndroid Build Coastguard Worker #include <bits/ioctl.h>
41*8d67ca89SAndroid Build Coastguard Worker #include <bits/lockf.h>
42*8d67ca89SAndroid Build Coastguard Worker #include <bits/posix_limits.h>
43*8d67ca89SAndroid Build Coastguard Worker #include <bits/seek_constants.h>
44*8d67ca89SAndroid Build Coastguard Worker #include <bits/sysconf.h>
45*8d67ca89SAndroid Build Coastguard Worker 
46*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS
47*8d67ca89SAndroid Build Coastguard Worker 
48*8d67ca89SAndroid Build Coastguard Worker #define STDIN_FILENO	0
49*8d67ca89SAndroid Build Coastguard Worker #define STDOUT_FILENO	1
50*8d67ca89SAndroid Build Coastguard Worker #define STDERR_FILENO	2
51*8d67ca89SAndroid Build Coastguard Worker 
52*8d67ca89SAndroid Build Coastguard Worker #define F_OK 0
53*8d67ca89SAndroid Build Coastguard Worker #define X_OK 1
54*8d67ca89SAndroid Build Coastguard Worker #define W_OK 2
55*8d67ca89SAndroid Build Coastguard Worker #define R_OK 4
56*8d67ca89SAndroid Build Coastguard Worker 
57*8d67ca89SAndroid Build Coastguard Worker #define _PC_FILESIZEBITS 0
58*8d67ca89SAndroid Build Coastguard Worker #define _PC_LINK_MAX 1
59*8d67ca89SAndroid Build Coastguard Worker #define _PC_MAX_CANON 2
60*8d67ca89SAndroid Build Coastguard Worker #define _PC_MAX_INPUT 3
61*8d67ca89SAndroid Build Coastguard Worker #define _PC_NAME_MAX 4
62*8d67ca89SAndroid Build Coastguard Worker #define _PC_PATH_MAX 5
63*8d67ca89SAndroid Build Coastguard Worker #define _PC_PIPE_BUF 6
64*8d67ca89SAndroid Build Coastguard Worker #define _PC_2_SYMLINKS 7
65*8d67ca89SAndroid Build Coastguard Worker #define _PC_ALLOC_SIZE_MIN 8
66*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_INCR_XFER_SIZE 9
67*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_MAX_XFER_SIZE 10
68*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_MIN_XFER_SIZE 11
69*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_XFER_ALIGN 12
70*8d67ca89SAndroid Build Coastguard Worker #define _PC_SYMLINK_MAX 13
71*8d67ca89SAndroid Build Coastguard Worker #define _PC_CHOWN_RESTRICTED 14
72*8d67ca89SAndroid Build Coastguard Worker #define _PC_NO_TRUNC 15
73*8d67ca89SAndroid Build Coastguard Worker #define _PC_VDISABLE 16
74*8d67ca89SAndroid Build Coastguard Worker #define _PC_ASYNC_IO 17
75*8d67ca89SAndroid Build Coastguard Worker #define _PC_PRIO_IO 18
76*8d67ca89SAndroid Build Coastguard Worker #define _PC_SYNC_IO 19
77*8d67ca89SAndroid Build Coastguard Worker 
78*8d67ca89SAndroid Build Coastguard Worker extern char* _Nullable * _Nullable environ;
79*8d67ca89SAndroid Build Coastguard Worker 
80*8d67ca89SAndroid Build Coastguard Worker __noreturn void _exit(int __status);
81*8d67ca89SAndroid Build Coastguard Worker 
82*8d67ca89SAndroid Build Coastguard Worker /**
83*8d67ca89SAndroid Build Coastguard Worker  * [fork(2)](https://man7.org/linux/man-pages/man2/fork.2.html) creates a new
84*8d67ca89SAndroid Build Coastguard Worker  * process. fork() runs any handlers set by pthread_atfork().
85*8d67ca89SAndroid Build Coastguard Worker  *
86*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 in the child, the pid of the child in the parent,
87*8d67ca89SAndroid Build Coastguard Worker  * and returns -1 and sets `errno` on failure.
88*8d67ca89SAndroid Build Coastguard Worker  */
89*8d67ca89SAndroid Build Coastguard Worker pid_t fork(void);
90*8d67ca89SAndroid Build Coastguard Worker 
91*8d67ca89SAndroid Build Coastguard Worker /**
92*8d67ca89SAndroid Build Coastguard Worker  * _Fork() creates a new process. _Fork() differs from fork() in that it does
93*8d67ca89SAndroid Build Coastguard Worker  * not run any handlers set by pthread_atfork(). In addition to any user-defined
94*8d67ca89SAndroid Build Coastguard Worker  * ones, bionic uses pthread_atfork() handlers to ensure consistency of its own
95*8d67ca89SAndroid Build Coastguard Worker  * state, so the child should only call
96*8d67ca89SAndroid Build Coastguard Worker  * [POSIX async-safe](https://man7.org/linux/man-pages/man7/signal-safety.7.html)
97*8d67ca89SAndroid Build Coastguard Worker  * functions.
98*8d67ca89SAndroid Build Coastguard Worker  *
99*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 in the child, the pid of the child in the parent,
100*8d67ca89SAndroid Build Coastguard Worker  * and returns -1 and sets `errno` on failure.
101*8d67ca89SAndroid Build Coastguard Worker  *
102*8d67ca89SAndroid Build Coastguard Worker  * Available since API level 35.
103*8d67ca89SAndroid Build Coastguard Worker  */
104*8d67ca89SAndroid Build Coastguard Worker 
105*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(35)
106*8d67ca89SAndroid Build Coastguard Worker pid_t _Fork(void) __INTRODUCED_IN(35);
107*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(35) */
108*8d67ca89SAndroid Build Coastguard Worker 
109*8d67ca89SAndroid Build Coastguard Worker 
110*8d67ca89SAndroid Build Coastguard Worker /**
111*8d67ca89SAndroid Build Coastguard Worker  * [vfork(2)](https://man7.org/linux/man-pages/man2/vfork.2.html) creates a new
112*8d67ca89SAndroid Build Coastguard Worker  * process. vfork() differs from fork() in that it does not run any handlers
113*8d67ca89SAndroid Build Coastguard Worker  * set by pthread_atfork(), and the parent is suspended until the child calls
114*8d67ca89SAndroid Build Coastguard Worker  * exec() or exits.
115*8d67ca89SAndroid Build Coastguard Worker  *
116*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 in the child, the pid of the child in the parent,
117*8d67ca89SAndroid Build Coastguard Worker  * and returns -1 and sets `errno` on failure.
118*8d67ca89SAndroid Build Coastguard Worker  */
119*8d67ca89SAndroid Build Coastguard Worker pid_t vfork(void) __returns_twice;
120*8d67ca89SAndroid Build Coastguard Worker 
121*8d67ca89SAndroid Build Coastguard Worker /**
122*8d67ca89SAndroid Build Coastguard Worker  * [getpid(2)](https://man7.org/linux/man-pages/man2/getpid.2.html) returns
123*8d67ca89SAndroid Build Coastguard Worker  * the caller's process ID.
124*8d67ca89SAndroid Build Coastguard Worker  *
125*8d67ca89SAndroid Build Coastguard Worker  * Returns the caller's process ID.
126*8d67ca89SAndroid Build Coastguard Worker  */
127*8d67ca89SAndroid Build Coastguard Worker pid_t  getpid(void);
128*8d67ca89SAndroid Build Coastguard Worker 
129*8d67ca89SAndroid Build Coastguard Worker /**
130*8d67ca89SAndroid Build Coastguard Worker  * [gettid(2)](https://man7.org/linux/man-pages/man2/gettid.2.html) returns
131*8d67ca89SAndroid Build Coastguard Worker  * the caller's thread ID.
132*8d67ca89SAndroid Build Coastguard Worker  *
133*8d67ca89SAndroid Build Coastguard Worker  * Returns the caller's thread ID.
134*8d67ca89SAndroid Build Coastguard Worker  */
135*8d67ca89SAndroid Build Coastguard Worker pid_t  gettid(void);
136*8d67ca89SAndroid Build Coastguard Worker 
137*8d67ca89SAndroid Build Coastguard Worker pid_t  getpgid(pid_t __pid);
138*8d67ca89SAndroid Build Coastguard Worker int    setpgid(pid_t __pid, pid_t __pgid);
139*8d67ca89SAndroid Build Coastguard Worker pid_t  getppid(void);
140*8d67ca89SAndroid Build Coastguard Worker pid_t  getpgrp(void);
141*8d67ca89SAndroid Build Coastguard Worker int    setpgrp(void);
142*8d67ca89SAndroid Build Coastguard Worker pid_t  getsid(pid_t __pid);
143*8d67ca89SAndroid Build Coastguard Worker pid_t  setsid(void);
144*8d67ca89SAndroid Build Coastguard Worker 
145*8d67ca89SAndroid Build Coastguard Worker int execv(const char* _Nonnull __path, char* _Nullable const* _Nullable __argv);
146*8d67ca89SAndroid Build Coastguard Worker int execvp(const char* _Nonnull __file, char* _Nullable const* _Nullable __argv);
147*8d67ca89SAndroid Build Coastguard Worker int execvpe(const char* _Nonnull __file, char* _Nullable const* _Nullable __argv, char* _Nullable const* _Nullable __envp);
148*8d67ca89SAndroid Build Coastguard Worker int execve(const char* _Nonnull __file, char* _Nullable const* _Nullable __argv, char* _Nullable const* _Nullable __envp);
149*8d67ca89SAndroid Build Coastguard Worker int execl(const char* _Nonnull __path, const char* _Nullable __arg0, ...) __attribute__((__sentinel__));
150*8d67ca89SAndroid Build Coastguard Worker int execlp(const char* _Nonnull __file, const char* _Nullable __arg0, ...) __attribute__((__sentinel__));
151*8d67ca89SAndroid Build Coastguard Worker int execle(const char* _Nonnull __path, const char* _Nullable __arg0, ... /*,  char* const* __envp */)
152*8d67ca89SAndroid Build Coastguard Worker     __attribute__((__sentinel__(1)));
153*8d67ca89SAndroid Build Coastguard Worker 
154*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28)
155*8d67ca89SAndroid Build Coastguard Worker int fexecve(int __fd, char* _Nullable const* _Nullable __argv, char* _Nullable const* _Nullable __envp) __INTRODUCED_IN(28);
156*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */
157*8d67ca89SAndroid Build Coastguard Worker 
158*8d67ca89SAndroid Build Coastguard Worker 
159*8d67ca89SAndroid Build Coastguard Worker int nice(int __incr);
160*8d67ca89SAndroid Build Coastguard Worker 
161*8d67ca89SAndroid Build Coastguard Worker /**
162*8d67ca89SAndroid Build Coastguard Worker  * [setegid(2)](https://man7.org/linux/man-pages/man2/setegid.2.html) sets
163*8d67ca89SAndroid Build Coastguard Worker  * the effective group ID.
164*8d67ca89SAndroid Build Coastguard Worker  *
165*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
166*8d67ca89SAndroid Build Coastguard Worker  * in the process.
167*8d67ca89SAndroid Build Coastguard Worker  *
168*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
169*8d67ca89SAndroid Build Coastguard Worker  */
170*8d67ca89SAndroid Build Coastguard Worker int setegid(gid_t __gid);
171*8d67ca89SAndroid Build Coastguard Worker 
172*8d67ca89SAndroid Build Coastguard Worker /**
173*8d67ca89SAndroid Build Coastguard Worker  * [seteuid(2)](https://man7.org/linux/man-pages/man2/seteuid.2.html) sets
174*8d67ca89SAndroid Build Coastguard Worker  * the effective user ID.
175*8d67ca89SAndroid Build Coastguard Worker  *
176*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
177*8d67ca89SAndroid Build Coastguard Worker  * in the process.
178*8d67ca89SAndroid Build Coastguard Worker  *
179*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
180*8d67ca89SAndroid Build Coastguard Worker  */
181*8d67ca89SAndroid Build Coastguard Worker int seteuid(uid_t __uid);
182*8d67ca89SAndroid Build Coastguard Worker 
183*8d67ca89SAndroid Build Coastguard Worker /**
184*8d67ca89SAndroid Build Coastguard Worker  * [setgid(2)](https://man7.org/linux/man-pages/man2/setgid.2.html) sets
185*8d67ca89SAndroid Build Coastguard Worker  * the group ID.
186*8d67ca89SAndroid Build Coastguard Worker  *
187*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
188*8d67ca89SAndroid Build Coastguard Worker  * in the process.
189*8d67ca89SAndroid Build Coastguard Worker  *
190*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
191*8d67ca89SAndroid Build Coastguard Worker  */
192*8d67ca89SAndroid Build Coastguard Worker int setgid(gid_t __gid);
193*8d67ca89SAndroid Build Coastguard Worker 
194*8d67ca89SAndroid Build Coastguard Worker /**
195*8d67ca89SAndroid Build Coastguard Worker  * [setregid(2)](https://man7.org/linux/man-pages/man2/setregid.2.html) sets
196*8d67ca89SAndroid Build Coastguard Worker  * the real and effective group IDs (use -1 to leave an ID unchanged).
197*8d67ca89SAndroid Build Coastguard Worker  *
198*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
199*8d67ca89SAndroid Build Coastguard Worker  * in the process.
200*8d67ca89SAndroid Build Coastguard Worker  *
201*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
202*8d67ca89SAndroid Build Coastguard Worker  */
203*8d67ca89SAndroid Build Coastguard Worker int setregid(gid_t __rgid, gid_t __egid);
204*8d67ca89SAndroid Build Coastguard Worker 
205*8d67ca89SAndroid Build Coastguard Worker /**
206*8d67ca89SAndroid Build Coastguard Worker  * [setresgid(2)](https://man7.org/linux/man-pages/man2/setresgid.2.html) sets
207*8d67ca89SAndroid Build Coastguard Worker  * the real, effective, and saved group IDs (use -1 to leave an ID unchanged).
208*8d67ca89SAndroid Build Coastguard Worker  *
209*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
210*8d67ca89SAndroid Build Coastguard Worker  * in the process.
211*8d67ca89SAndroid Build Coastguard Worker  *
212*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
213*8d67ca89SAndroid Build Coastguard Worker  */
214*8d67ca89SAndroid Build Coastguard Worker int setresgid(gid_t __rgid, gid_t __egid, gid_t __sgid);
215*8d67ca89SAndroid Build Coastguard Worker 
216*8d67ca89SAndroid Build Coastguard Worker /**
217*8d67ca89SAndroid Build Coastguard Worker  * [setresuid(2)](https://man7.org/linux/man-pages/man2/setresuid.2.html) sets
218*8d67ca89SAndroid Build Coastguard Worker  * the real, effective, and saved user IDs (use -1 to leave an ID unchanged).
219*8d67ca89SAndroid Build Coastguard Worker  *
220*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
221*8d67ca89SAndroid Build Coastguard Worker  * in the process.
222*8d67ca89SAndroid Build Coastguard Worker  *
223*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
224*8d67ca89SAndroid Build Coastguard Worker  */
225*8d67ca89SAndroid Build Coastguard Worker int setresuid(uid_t __ruid, uid_t __euid, uid_t __suid);
226*8d67ca89SAndroid Build Coastguard Worker 
227*8d67ca89SAndroid Build Coastguard Worker /**
228*8d67ca89SAndroid Build Coastguard Worker  * [setreuid(2)](https://man7.org/linux/man-pages/man2/setreuid.2.html) sets
229*8d67ca89SAndroid Build Coastguard Worker  * the real and effective group IDs (use -1 to leave an ID unchanged).
230*8d67ca89SAndroid Build Coastguard Worker  *
231*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
232*8d67ca89SAndroid Build Coastguard Worker  * in the process.
233*8d67ca89SAndroid Build Coastguard Worker  *
234*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
235*8d67ca89SAndroid Build Coastguard Worker  */
236*8d67ca89SAndroid Build Coastguard Worker int setreuid(uid_t __ruid, uid_t __euid);
237*8d67ca89SAndroid Build Coastguard Worker 
238*8d67ca89SAndroid Build Coastguard Worker /**
239*8d67ca89SAndroid Build Coastguard Worker  * [setuid(2)](https://man7.org/linux/man-pages/man2/setuid.2.html) sets
240*8d67ca89SAndroid Build Coastguard Worker  * the user ID.
241*8d67ca89SAndroid Build Coastguard Worker  *
242*8d67ca89SAndroid Build Coastguard Worker  * On Android, this function only affects the calling thread, not all threads
243*8d67ca89SAndroid Build Coastguard Worker  * in the process.
244*8d67ca89SAndroid Build Coastguard Worker  *
245*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
246*8d67ca89SAndroid Build Coastguard Worker  */
247*8d67ca89SAndroid Build Coastguard Worker int setuid(uid_t __uid);
248*8d67ca89SAndroid Build Coastguard Worker 
249*8d67ca89SAndroid Build Coastguard Worker uid_t getuid(void);
250*8d67ca89SAndroid Build Coastguard Worker uid_t geteuid(void);
251*8d67ca89SAndroid Build Coastguard Worker gid_t getgid(void);
252*8d67ca89SAndroid Build Coastguard Worker gid_t getegid(void);
253*8d67ca89SAndroid Build Coastguard Worker int getgroups(int __size, gid_t* _Nullable __list);
254*8d67ca89SAndroid Build Coastguard Worker int setgroups(size_t __size, const gid_t* _Nullable __list);
255*8d67ca89SAndroid Build Coastguard Worker int getresuid(uid_t* _Nonnull __ruid, uid_t* _Nonnull __euid, uid_t* _Nonnull __suid);
256*8d67ca89SAndroid Build Coastguard Worker int getresgid(gid_t* _Nonnull __rgid, gid_t* _Nonnull __egid, gid_t* _Nonnull __sgid);
257*8d67ca89SAndroid Build Coastguard Worker char* _Nullable getlogin(void);
258*8d67ca89SAndroid Build Coastguard Worker 
259*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28)
260*8d67ca89SAndroid Build Coastguard Worker int getlogin_r(char* _Nonnull __buffer, size_t __buffer_size) __INTRODUCED_IN(28);
261*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */
262*8d67ca89SAndroid Build Coastguard Worker 
263*8d67ca89SAndroid Build Coastguard Worker 
264*8d67ca89SAndroid Build Coastguard Worker long fpathconf(int __fd, int __name);
265*8d67ca89SAndroid Build Coastguard Worker long pathconf(const char* _Nonnull __path, int __name);
266*8d67ca89SAndroid Build Coastguard Worker 
267*8d67ca89SAndroid Build Coastguard Worker int access(const char* _Nonnull __path, int __mode);
268*8d67ca89SAndroid Build Coastguard Worker int faccessat(int __dirfd, const char* _Nonnull __path, int __mode, int __flags);
269*8d67ca89SAndroid Build Coastguard Worker int link(const char* _Nonnull __old_path, const char* _Nonnull __new_path);
270*8d67ca89SAndroid Build Coastguard Worker int linkat(int __old_dir_fd, const char* _Nonnull __old_path, int __new_dir_fd, const char* _Nonnull __new_path, int __flags);
271*8d67ca89SAndroid Build Coastguard Worker int unlink(const char* _Nonnull __path);
272*8d67ca89SAndroid Build Coastguard Worker int unlinkat(int __dirfd, const char* _Nonnull __path, int __flags);
273*8d67ca89SAndroid Build Coastguard Worker 
274*8d67ca89SAndroid Build Coastguard Worker /**
275*8d67ca89SAndroid Build Coastguard Worker  * [chdir(2)](https://man7.org/linux/man-pages/man2/chdir.2.html) changes
276*8d67ca89SAndroid Build Coastguard Worker  * the current working directory to the given path.
277*8d67ca89SAndroid Build Coastguard Worker  *
278*8d67ca89SAndroid Build Coastguard Worker  * This function affects all threads in the process, so is generally a bad idea
279*8d67ca89SAndroid Build Coastguard Worker  * on Android where most code will be running in a multi-threaded context.
280*8d67ca89SAndroid Build Coastguard Worker  *
281*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
282*8d67ca89SAndroid Build Coastguard Worker  */
283*8d67ca89SAndroid Build Coastguard Worker int chdir(const char* _Nonnull __path);
284*8d67ca89SAndroid Build Coastguard Worker 
285*8d67ca89SAndroid Build Coastguard Worker /**
286*8d67ca89SAndroid Build Coastguard Worker  * [fchdir(2)](https://man7.org/linux/man-pages/man2/chdir.2.html) changes
287*8d67ca89SAndroid Build Coastguard Worker  * the current working directory to the given fd.
288*8d67ca89SAndroid Build Coastguard Worker  *
289*8d67ca89SAndroid Build Coastguard Worker  * This function affects all threads in the process, so is generally a bad idea
290*8d67ca89SAndroid Build Coastguard Worker  * on Android where most code will be running in a multi-threaded context.
291*8d67ca89SAndroid Build Coastguard Worker  *
292*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
293*8d67ca89SAndroid Build Coastguard Worker  */
294*8d67ca89SAndroid Build Coastguard Worker int fchdir(int __fd);
295*8d67ca89SAndroid Build Coastguard Worker 
296*8d67ca89SAndroid Build Coastguard Worker int rmdir(const char* _Nonnull __path);
297*8d67ca89SAndroid Build Coastguard Worker int pipe(int __fds[_Nonnull 2]);
298*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_GNU)
299*8d67ca89SAndroid Build Coastguard Worker int pipe2(int __fds[_Nonnull 2], int __flags);
300*8d67ca89SAndroid Build Coastguard Worker #endif
301*8d67ca89SAndroid Build Coastguard Worker int chroot(const char* _Nonnull __path);
302*8d67ca89SAndroid Build Coastguard Worker int symlink(const char* _Nonnull __old_path, const char* _Nonnull __new_path);
303*8d67ca89SAndroid Build Coastguard Worker int symlinkat(const char* _Nonnull __old_path, int __new_dir_fd, const char* _Nonnull __new_path);
304*8d67ca89SAndroid Build Coastguard Worker ssize_t readlink(const char* _Nonnull __path, char* _Nonnull __buf, size_t __buf_size);
305*8d67ca89SAndroid Build Coastguard Worker ssize_t readlinkat(int __dir_fd, const char* _Nonnull __path, char* _Nonnull __buf, size_t __buf_size);
306*8d67ca89SAndroid Build Coastguard Worker int chown(const char* _Nonnull __path, uid_t __owner, gid_t __group);
307*8d67ca89SAndroid Build Coastguard Worker int fchown(int __fd, uid_t __owner, gid_t __group);
308*8d67ca89SAndroid Build Coastguard Worker int fchownat(int __dir_fd, const char* _Nonnull __path, uid_t __owner, gid_t __group, int __flags);
309*8d67ca89SAndroid Build Coastguard Worker int lchown(const char* _Nonnull __path, uid_t __owner, gid_t __group);
310*8d67ca89SAndroid Build Coastguard Worker char* _Nullable getcwd(char* _Nullable __buf, size_t __size);
311*8d67ca89SAndroid Build Coastguard Worker 
312*8d67ca89SAndroid Build Coastguard Worker void sync(void);
313*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_GNU)
314*8d67ca89SAndroid Build Coastguard Worker 
315*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28)
316*8d67ca89SAndroid Build Coastguard Worker int syncfs(int __fd) __INTRODUCED_IN(28);
317*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */
318*8d67ca89SAndroid Build Coastguard Worker 
319*8d67ca89SAndroid Build Coastguard Worker #endif
320*8d67ca89SAndroid Build Coastguard Worker 
321*8d67ca89SAndroid Build Coastguard Worker int close(int __fd);
322*8d67ca89SAndroid Build Coastguard Worker 
323*8d67ca89SAndroid Build Coastguard Worker /**
324*8d67ca89SAndroid Build Coastguard Worker  * [read(2)](https://man7.org/linux/man-pages/man2/read.2.html) reads
325*8d67ca89SAndroid Build Coastguard Worker  * up to `__count` bytes from file descriptor `__fd` into `__buf`.
326*8d67ca89SAndroid Build Coastguard Worker  *
327*8d67ca89SAndroid Build Coastguard Worker  * Note: `__buf` is not normally nullable, but may be null in the
328*8d67ca89SAndroid Build Coastguard Worker  * special case of a zero-length read(), which while not generally
329*8d67ca89SAndroid Build Coastguard Worker  * useful may be meaningful to some device drivers.
330*8d67ca89SAndroid Build Coastguard Worker  *
331*8d67ca89SAndroid Build Coastguard Worker  * Returns the number of bytes read on success, and returns -1 and sets `errno` on failure.
332*8d67ca89SAndroid Build Coastguard Worker  */
333*8d67ca89SAndroid Build Coastguard Worker ssize_t read(int __fd, void* __BIONIC_COMPLICATED_NULLNESS __buf, size_t __count);
334*8d67ca89SAndroid Build Coastguard Worker 
335*8d67ca89SAndroid Build Coastguard Worker /**
336*8d67ca89SAndroid Build Coastguard Worker  * [write(2)](https://man7.org/linux/man-pages/man2/write.2.html) writes
337*8d67ca89SAndroid Build Coastguard Worker  * up to `__count` bytes to file descriptor `__fd` from `__buf`.
338*8d67ca89SAndroid Build Coastguard Worker  *
339*8d67ca89SAndroid Build Coastguard Worker  * Note: `__buf` is not normally nullable, but may be null in the
340*8d67ca89SAndroid Build Coastguard Worker  * special case of a zero-length write(), which while not generally
341*8d67ca89SAndroid Build Coastguard Worker  * useful may be meaningful to some device drivers.
342*8d67ca89SAndroid Build Coastguard Worker  *
343*8d67ca89SAndroid Build Coastguard Worker  * Returns the number of bytes written on success, and returns -1 and sets `errno` on failure.
344*8d67ca89SAndroid Build Coastguard Worker  */
345*8d67ca89SAndroid Build Coastguard Worker ssize_t write(int __fd, const void* __BIONIC_COMPLICATED_NULLNESS __buf, size_t __count);
346*8d67ca89SAndroid Build Coastguard Worker 
347*8d67ca89SAndroid Build Coastguard Worker int dup(int __old_fd);
348*8d67ca89SAndroid Build Coastguard Worker int dup2(int __old_fd, int __new_fd);
349*8d67ca89SAndroid Build Coastguard Worker int dup3(int __old_fd, int __new_fd, int __flags);
350*8d67ca89SAndroid Build Coastguard Worker int fsync(int __fd);
351*8d67ca89SAndroid Build Coastguard Worker int fdatasync(int __fd);
352*8d67ca89SAndroid Build Coastguard Worker 
353*8d67ca89SAndroid Build Coastguard Worker /* See https://android.googlesource.com/platform/bionic/+/main/docs/32-bit-abi.md */
354*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_FILE_OFFSET64)
355*8d67ca89SAndroid Build Coastguard Worker int truncate(const char* _Nonnull __path, off_t __length) __RENAME(truncate64);
356*8d67ca89SAndroid Build Coastguard Worker off_t lseek(int __fd, off_t __offset, int __whence) __RENAME(lseek64);
357*8d67ca89SAndroid Build Coastguard Worker ssize_t pread(int __fd, void* _Nonnull __buf, size_t __count, off_t __offset) __RENAME(pread64);
358*8d67ca89SAndroid Build Coastguard Worker ssize_t pwrite(int __fd, const void* _Nonnull __buf, size_t __count, off_t __offset) __RENAME(pwrite64);
359*8d67ca89SAndroid Build Coastguard Worker int ftruncate(int __fd, off_t __length) __RENAME(ftruncate64);
360*8d67ca89SAndroid Build Coastguard Worker #else
361*8d67ca89SAndroid Build Coastguard Worker int truncate(const char* _Nonnull __path, off_t __length);
362*8d67ca89SAndroid Build Coastguard Worker off_t lseek(int __fd, off_t __offset, int __whence);
363*8d67ca89SAndroid Build Coastguard Worker ssize_t pread(int __fd, void* _Nonnull __buf, size_t __count, off_t __offset);
364*8d67ca89SAndroid Build Coastguard Worker ssize_t pwrite(int __fd, const void* _Nonnull __buf, size_t __count, off_t __offset);
365*8d67ca89SAndroid Build Coastguard Worker int ftruncate(int __fd, off_t __length);
366*8d67ca89SAndroid Build Coastguard Worker #endif
367*8d67ca89SAndroid Build Coastguard Worker 
368*8d67ca89SAndroid Build Coastguard Worker int truncate64(const char* _Nonnull __path, off64_t __length);
369*8d67ca89SAndroid Build Coastguard Worker off64_t lseek64(int __fd, off64_t __offset, int __whence);
370*8d67ca89SAndroid Build Coastguard Worker ssize_t pread64(int __fd, void* _Nonnull __buf, size_t __count, off64_t __offset);
371*8d67ca89SAndroid Build Coastguard Worker ssize_t pwrite64(int __fd, const void* _Nonnull __buf, size_t __count, off64_t __offset);
372*8d67ca89SAndroid Build Coastguard Worker int ftruncate64(int __fd, off64_t __length);
373*8d67ca89SAndroid Build Coastguard Worker 
374*8d67ca89SAndroid Build Coastguard Worker int pause(void);
375*8d67ca89SAndroid Build Coastguard Worker unsigned int alarm(unsigned int __seconds);
376*8d67ca89SAndroid Build Coastguard Worker unsigned int sleep(unsigned int __seconds);
377*8d67ca89SAndroid Build Coastguard Worker int usleep(useconds_t __microseconds);
378*8d67ca89SAndroid Build Coastguard Worker 
379*8d67ca89SAndroid Build Coastguard Worker int gethostname(char* _Nonnull _buf, size_t __buf_size);
380*8d67ca89SAndroid Build Coastguard Worker 
381*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23)
382*8d67ca89SAndroid Build Coastguard Worker int sethostname(const char* _Nonnull __name, size_t __n) __INTRODUCED_IN(23);
383*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */
384*8d67ca89SAndroid Build Coastguard Worker 
385*8d67ca89SAndroid Build Coastguard Worker 
386*8d67ca89SAndroid Build Coastguard Worker int brk(void* _Nonnull __addr);
387*8d67ca89SAndroid Build Coastguard Worker void* _Nullable sbrk(ptrdiff_t __increment);
388*8d67ca89SAndroid Build Coastguard Worker 
389*8d67ca89SAndroid Build Coastguard Worker int isatty(int __fd);
390*8d67ca89SAndroid Build Coastguard Worker char* _Nullable ttyname(int __fd);
391*8d67ca89SAndroid Build Coastguard Worker int ttyname_r(int __fd, char* _Nonnull __buf, size_t __buf_size);
392*8d67ca89SAndroid Build Coastguard Worker 
393*8d67ca89SAndroid Build Coastguard Worker int acct(const char* _Nullable __path);
394*8d67ca89SAndroid Build Coastguard Worker 
395*8d67ca89SAndroid Build Coastguard Worker /**
396*8d67ca89SAndroid Build Coastguard Worker  * [getpagesize(2)](https://man7.org/linux/man-pages/man2/getpagesize.2.html)
397*8d67ca89SAndroid Build Coastguard Worker  * returns the system's page size. This is slightly faster than going via
398*8d67ca89SAndroid Build Coastguard Worker  * sysconf(), and avoids the linear search in getauxval().
399*8d67ca89SAndroid Build Coastguard Worker  *
400*8d67ca89SAndroid Build Coastguard Worker  * Returns the system's page size in bytes.
401*8d67ca89SAndroid Build Coastguard Worker  */
402*8d67ca89SAndroid Build Coastguard Worker int getpagesize(void) __attribute_const__;
403*8d67ca89SAndroid Build Coastguard Worker 
404*8d67ca89SAndroid Build Coastguard Worker long syscall(long __number, ...);
405*8d67ca89SAndroid Build Coastguard Worker 
406*8d67ca89SAndroid Build Coastguard Worker int daemon(int __no_chdir, int __no_close);
407*8d67ca89SAndroid Build Coastguard Worker 
408*8d67ca89SAndroid Build Coastguard Worker #if defined(__arm__)
409*8d67ca89SAndroid Build Coastguard Worker /**
410*8d67ca89SAndroid Build Coastguard Worker  * New code should use __builtin___clear_cache() instead, which works on
411*8d67ca89SAndroid Build Coastguard Worker  * all architectures.
412*8d67ca89SAndroid Build Coastguard Worker  */
413*8d67ca89SAndroid Build Coastguard Worker int cacheflush(long __addr, long __nbytes, long __cache);
414*8d67ca89SAndroid Build Coastguard Worker #endif
415*8d67ca89SAndroid Build Coastguard Worker 
416*8d67ca89SAndroid Build Coastguard Worker pid_t tcgetpgrp(int __fd);
417*8d67ca89SAndroid Build Coastguard Worker int tcsetpgrp(int __fd, pid_t __pid);
418*8d67ca89SAndroid Build Coastguard Worker 
419*8d67ca89SAndroid Build Coastguard Worker /* Used to retry syscalls that can return EINTR. */
420*8d67ca89SAndroid Build Coastguard Worker #define TEMP_FAILURE_RETRY(exp) ({         \
421*8d67ca89SAndroid Build Coastguard Worker     __typeof__(exp) _rc;                   \
422*8d67ca89SAndroid Build Coastguard Worker     do {                                   \
423*8d67ca89SAndroid Build Coastguard Worker         _rc = (exp);                       \
424*8d67ca89SAndroid Build Coastguard Worker     } while (_rc == -1 && errno == EINTR); \
425*8d67ca89SAndroid Build Coastguard Worker     _rc; })
426*8d67ca89SAndroid Build Coastguard Worker 
427*8d67ca89SAndroid Build Coastguard Worker 
428*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(26)
429*8d67ca89SAndroid Build Coastguard Worker int getdomainname(char* _Nonnull __buf, size_t __buf_size) __INTRODUCED_IN(26);
430*8d67ca89SAndroid Build Coastguard Worker int setdomainname(const char* _Nonnull __name, size_t __n) __INTRODUCED_IN(26);
431*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(26) */
432*8d67ca89SAndroid Build Coastguard Worker 
433*8d67ca89SAndroid Build Coastguard Worker 
434*8d67ca89SAndroid Build Coastguard Worker /**
435*8d67ca89SAndroid Build Coastguard Worker  * [copy_file_range(2)](https://man7.org/linux/man-pages/man2/copy_file_range.2.html) copies
436*8d67ca89SAndroid Build Coastguard Worker  * a range of data from one file descriptor to another.
437*8d67ca89SAndroid Build Coastguard Worker  *
438*8d67ca89SAndroid Build Coastguard Worker  * Available since API level 34.
439*8d67ca89SAndroid Build Coastguard Worker  *
440*8d67ca89SAndroid Build Coastguard Worker  * Returns the number of bytes copied on success, and returns -1 and sets
441*8d67ca89SAndroid Build Coastguard Worker  * `errno` on failure.
442*8d67ca89SAndroid Build Coastguard Worker  */
443*8d67ca89SAndroid Build Coastguard Worker 
444*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(34)
445*8d67ca89SAndroid Build Coastguard Worker ssize_t copy_file_range(int __fd_in, off64_t* _Nullable __off_in, int __fd_out, off64_t* _Nullable __off_out, size_t __length, unsigned int __flags) __INTRODUCED_IN(34);
446*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(34) */
447*8d67ca89SAndroid Build Coastguard Worker 
448*8d67ca89SAndroid Build Coastguard Worker 
449*8d67ca89SAndroid Build Coastguard Worker #if __ANDROID_API__ >= 28
450*8d67ca89SAndroid Build Coastguard Worker void swab(const void* _Nonnull __src, void* _Nonnull __dst, ssize_t __byte_count) __INTRODUCED_IN(28);
451*8d67ca89SAndroid Build Coastguard Worker #endif
452*8d67ca89SAndroid Build Coastguard Worker 
453*8d67ca89SAndroid Build Coastguard Worker /**
454*8d67ca89SAndroid Build Coastguard Worker  * [close_range(2)](https://man7.org/linux/man-pages/man2/close_range.2.html)
455*8d67ca89SAndroid Build Coastguard Worker  * performs an action (which depends on value of flags) on an inclusive range
456*8d67ca89SAndroid Build Coastguard Worker  * of file descriptors.
457*8d67ca89SAndroid Build Coastguard Worker  *
458*8d67ca89SAndroid Build Coastguard Worker  * Available since API level 34.
459*8d67ca89SAndroid Build Coastguard Worker  *
460*8d67ca89SAndroid Build Coastguard Worker  * Note: there is no emulation on too old kernels, hence this will fail with
461*8d67ca89SAndroid Build Coastguard Worker  * -1/ENOSYS on pre-5.9 kernels, -1/EINVAL for unsupported flags.  In particular
462*8d67ca89SAndroid Build Coastguard Worker  * CLOSE_RANGE_CLOEXEC requires 5.11, though support was backported to Android
463*8d67ca89SAndroid Build Coastguard Worker  * Common Kernel 5.10-T.
464*8d67ca89SAndroid Build Coastguard Worker  *
465*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
466*8d67ca89SAndroid Build Coastguard Worker  */
467*8d67ca89SAndroid Build Coastguard Worker 
468*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(34)
469*8d67ca89SAndroid Build Coastguard Worker int close_range(unsigned int __min_fd, unsigned int __max_fd, int __flags) __INTRODUCED_IN(34);
470*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(34) */
471*8d67ca89SAndroid Build Coastguard Worker 
472*8d67ca89SAndroid Build Coastguard Worker 
473*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC_INCLUDE_FORTIFY_HEADERS)
474*8d67ca89SAndroid Build Coastguard Worker #define _UNISTD_H_
475*8d67ca89SAndroid Build Coastguard Worker #include <bits/fortify/unistd.h>
476*8d67ca89SAndroid Build Coastguard Worker #undef _UNISTD_H_
477*8d67ca89SAndroid Build Coastguard Worker #endif
478*8d67ca89SAndroid Build Coastguard Worker 
479*8d67ca89SAndroid Build Coastguard Worker __END_DECLS
480*8d67ca89SAndroid Build Coastguard Worker 
481*8d67ca89SAndroid Build Coastguard Worker #include <android/legacy_unistd_inlines.h>
482