1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Public Domain
5  * License:   Public Domain
6  * Authors:   Sean Kelly
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 module tango.stdc.posix.unistd;
10 
11 private import tango.stdc.posix.config;
12 private import tango.stdc.stddef;
13 public import tango.stdc.posix.inttypes;  // for intptr_t
14 public import tango.stdc.posix.sys.types; // for size_t, ssize_t, uid_t, gid_t, off_t, pid_t, useconds_t
15 public import tango.sys.consts.unistd;
16 extern (C):
17 
18 const STDIN_FILENO  = 0;
19 const STDOUT_FILENO = 1;
20 const STDERR_FILENO = 2;
21 
22 __gshared char*   optarg;
23 __gshared int     optind;
24 __gshared int     opterr;
25 __gshared int     optopt;
26 
27 int     access(in char*, int);
28 uint    alarm(uint);
29 int     chdir(in char*);
30 int     chroot(in char*);
31 int     chown(in char*, uid_t, gid_t);
32 int     close(int);
33 size_t  confstr(int, char*, size_t);
34 int     dup(int);
35 int     dup2(int, int);
36 int     execl(in char*, in char*, ...);
37 int     execle(in char*, in char*, ...);
38 int     execlp(in char*, in char*, ...);
39 int     execv(in char*, in char**);
40 int     execve(in char*, in char**, in char**);
41 int     execvp(in char*, in char**);
42 void    _exit(int);
43 int     fchown(int, uid_t, gid_t);
44 pid_t   fork();
45 c_long  fpathconf(int, int);
46 //int     ftruncate(int, off_t);
47 char*   getcwd(char*, size_t);
48 gid_t   getegid();
49 uid_t   geteuid();
50 gid_t   getgid();
51 int     getgroups(int, gid_t *);
52 int     gethostname(char*, size_t);
53 char*   getlogin();
54 int     getlogin_r(char*, size_t);
55 int     getopt(int, in char**, in char*);
56 pid_t   getpgrp();
57 pid_t   getpid();
58 pid_t   getppid();
59 uid_t   getuid();
60 int     isatty(int);
61 int     link(in char*, in char*);
62 //off_t   lseek(int, off_t, int);
63 c_long  pathconf(in char*, int);
64 int     pause();
65 int     pipe(int*);
66 ssize_t read(int, void*, size_t);
67 ssize_t readlink(in char*, char*, size_t);
68 int     rmdir(in char*);
69 int     setegid(gid_t);
70 int     seteuid(uid_t);
71 int     setgid(gid_t);
72 int     setpgid(pid_t, pid_t);
73 pid_t   setsid();
74 int     setuid(uid_t);
75 uint    sleep(uint);
76 int     symlink(in char*, in char*);
77 c_long  sysconf(int);
78 pid_t   tcgetpgrp(int);
79 int     tcsetpgrp(int, pid_t);
80 char*   ttyname(int);
81 int     ttyname_r(int, char*, size_t);
82 int     unlink(in char*);
83 ssize_t write(int, in void*, size_t);
84 
85 version( linux )
86 {
87   static if( __USE_LARGEFILE64 )
88   {
89     off_t lseek64(int, off_t, int);
90     alias lseek64 lseek;
91   }
92   else
93   {
94     off_t lseek(int, off_t, int);
95   }
96   static if( __USE_LARGEFILE64 )
97   {
98     int   ftruncate64(int, off_t);
99     alias ftruncate64 ftruncate;
100   }
101   else
102   {
103     int   ftruncate(int, off_t);
104   }
105 }
106 else version( FreeBSD )
107 {
108     off_t lseek(int, off_t, int);
109     int   ftruncate(int, off_t);
110 }
111 else version( solaris )
112 {
113   static if( __USE_LARGEFILE64 )
114   {
115     off_t lseek64(int, off_t, int);
116     alias lseek64 lseek;
117   }
118   else
119   {
120     off_t lseek(int, off_t, int);
121   }
122   static if( __USE_LARGEFILE64 )
123   {
124     int   ftruncate64(int, off_t);
125     alias ftruncate64 ftruncate;
126   }
127   else
128   {
129     int   ftruncate(int, off_t);
130   }
131 }
132 else
133 {
134     off_t lseek(int, off_t, int);
135     int   ftruncate(int, off_t);
136 }
137 
138 //
139 // File Synchronization (FSC)
140 //
141 int fsync(int);
142 
143 //
144 // Synchronized I/O (SIO)
145 //
146 int fdatasync(int);
147 
148 //
149 // XOpen (XSI)
150 //
151 /*
152 char*      crypt(in char*, in char*);
153 char*      ctermid(char*);
154 void       encrypt(char[64], int);
155 int        fchdir(int);
156 c_long     gethostid();
157 pid_t      getpgid(pid_t);
158 pid_t      getsid(pid_t);
159 char*      getwd(char*); // LEGACY
160 int        lchown(in char*, uid_t, gid_t);
161 int        lockf(int, int, off_t);
162 int        nice(int);
163 ssize_t    pread(int, void*, size_t, off_t);
164 ssize_t    pwrite(int, in void*, size_t, off_t);
165 pid_t      setpgrp();
166 int        setregid(gid_t, gid_t);
167 int        setreuid(uid_t, uid_t);
168 void       swab(in void*, void*, ssize_t);
169 void       sync();
170 int        truncate(in char*, off_t);
171 useconds_t ualarm(useconds_t, useconds_t);
172 int        usleep(useconds_t);
173 pid_t      vfork();
174 */
175 
176 version( linux )
177 {
178     char*      crypt(in char*, in char*);
179     char*      ctermid(char*);
180     void       encrypt(char[64], int);
181     int        fchdir(int);
182     c_long     gethostid();
183     pid_t      getpgid(pid_t);
184     pid_t      getsid(pid_t);
185     char*      getwd(char*); // LEGACY
186     int        lchown(in char*, uid_t, gid_t);
187     //int        lockf(int, int, off_t);
188     int        nice(int);
189     //ssize_t    pread(int, void*, size_t, off_t);
190     //ssize_t    pwrite(int, in void*, size_t, off_t);
191     pid_t      setpgrp();
192     int        setregid(gid_t, gid_t);
193     int        setreuid(uid_t, uid_t);
194     void       swab(in void*, void*, ssize_t);
195     void       sync();
196     //int        truncate(in char*, off_t);
197     useconds_t ualarm(useconds_t, useconds_t);
198     int        usleep(useconds_t);
199     pid_t      vfork();
200 
201   static if( __USE_LARGEFILE64 )
202   {
203     int        lockf64(int, int, off_t);
204     alias      lockf64 lockf;
205 
206     ssize_t    pread64(int, void*, size_t, off_t);
207     alias      pread64 pread;
208 
209     ssize_t    pwrite64(int, in void*, size_t, off_t);
210     alias      pwrite64 pwrite;
211 
212     int        truncate64(in char*, off_t);
213     alias      truncate64 truncate;
214   }
215   else
216   {
217     int        lockf(int, int, off_t);
218     ssize_t    pread(int, void*, size_t, off_t);
219     ssize_t    pwrite(int, in void*, size_t, off_t);
220     int        truncate(in char*, off_t);
221   }
222 }
223 else version(OSX)
224 {
225     char*      crypt(in char*, in char*);
226     char*      ctermid(char*);
227     void       encrypt(char[64], int);
228     int        fchdir(int);
229     c_long     gethostid();
230     pid_t      getpgid(pid_t);
231     pid_t      getsid(pid_t);
232     char*      getwd(char*); // LEGACY
233     int        lchown(in char*, uid_t, gid_t);
234     int        lockf(int, int, off_t);
235     int        nice(int);
236     ssize_t    pread(int, void*, size_t, off_t);
237     ssize_t    pwrite(int, in void*, size_t, off_t);
238     pid_t      setpgrp();
239     int        setregid(gid_t, gid_t);
240     int        setreuid(uid_t, uid_t);
241     void       swab(in void*, void*, ssize_t);
242     void       sync();
243     int        truncate(in char*, off_t);
244     useconds_t ualarm(useconds_t, useconds_t);
245     int        usleep(useconds_t);
246     pid_t      vfork();
247 }
248 else version (FreeBSD)
249 {
250     char*      crypt(in char*, in char*);
251     //char*      ctermid(char*);
252     void       encrypt(char*, int);
253     int        fchdir(int);
254     c_long     gethostid();
255     int        getpgid(pid_t);
256     int        getsid(pid_t);
257     char*      getwd(char*); // LEGACY
258     int        lchown(in char*, uid_t, gid_t);
259     int        lockf(int, int, off_t);
260     int        nice(int);
261     ssize_t    pread(int, void*, size_t, off_t);
262     ssize_t    pwrite(int, in void*, size_t, off_t);
263     int        setpgrp(pid_t, pid_t);
264     int        setregid(gid_t, gid_t);
265     int        setreuid(uid_t, uid_t);
266     void       swab(in void*, void*, ssize_t);
267     void       sync();
268     int        truncate(in char*, off_t);
269     useconds_t ualarm(useconds_t, useconds_t);
270     int        usleep(useconds_t);
271     pid_t      vfork();
272 }
273 else version (solaris)
274 {
275 	char*      crypt(in char*, in char*);
276 	//char*      ctermid(char*);
277 	void       encrypt(char*, int);
278 	int        fchdir(int);
279 	c_long     gethostid();
280 	int        getpgid(pid_t);
281 	int        getsid(pid_t);
282 	char*      getwd(char*); // LEGACY
283 	int        lchown(in char*, uid_t, gid_t);
284 	int        nice(int);
285 	int        setpgrp(pid_t, pid_t);
286 	int        setregid(gid_t, gid_t);
287 	int        setreuid(uid_t, uid_t);
288 	void       swab(in void*, void*, ssize_t);
289 	void       sync();
290 	useconds_t ualarm(useconds_t, useconds_t);
291 	int        usleep(useconds_t);
292 	pid_t      vfork();
293 
294   static if( __USE_LARGEFILE64 )
295   {
296     int        lockf64(int, int, off_t);
297     alias      lockf64 lockf;
298 
299     ssize_t    pread64(int, void*, size_t, off_t);
300     alias      pread64 pread;
301 
302     ssize_t    pwrite64(int, in void*, size_t, off_t);
303     alias      pwrite64 pwrite;
304 
305     int        truncate64(in char*, off_t);
306     alias      truncate64 truncate;
307   }
308   else
309   {
310     int        lockf(int, int, off_t);
311     ssize_t    pread(int, void*, size_t, off_t);
312     ssize_t    pwrite(int, in void*, size_t, off_t);
313     int        truncate(in char*, off_t);
314   }
315 }
316