132
|
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.sys.wait;
|
|
10
|
|
11 public import tango.stdc.posix.sys.types; // for id_t, pid_t
|
|
12 public import tango.stdc.posix.signal; // for siginfo_t (XSI)
|
|
13 //public import tango.stdc.posix.resource; // for rusage (XSI)
|
|
14
|
|
15 extern (C):
|
|
16
|
|
17 //
|
|
18 // Required
|
|
19 //
|
|
20 /*
|
|
21 WNOHANG
|
|
22 WUNTRACED
|
|
23
|
|
24 WEXITSTATUS
|
|
25 WIFCONTINUED
|
|
26 WIFEXITED
|
|
27 WIFSIGNALED
|
|
28 WIFSTOPPED
|
|
29 WSTOPSIG
|
|
30 WTERMSIG
|
|
31
|
|
32 pid_t wait(int*);
|
|
33 pid_t waitpid(pid_t, int*, int);
|
|
34 */
|
|
35
|
|
36 version( linux )
|
|
37 {
|
|
38 const WNOHANG = 1;
|
|
39 const WUNTRACED = 2;
|
|
40
|
|
41 private
|
|
42 {
|
|
43 const __W_CONTINUED = 0xFFFF;
|
|
44
|
|
45 extern (D) int __WTERMSIG( int status ) { return status & 0x7F; }
|
|
46 }
|
|
47
|
|
48 //
|
|
49 // NOTE: These macros assume __USE_BSD is not defined in the relevant
|
|
50 // C headers as the parameter definition there is different and
|
|
51 // much more complicated.
|
|
52 //
|
|
53 extern (D) int WEXITSTATUS( int status ) { return ( status & 0xFF00 ) >> 8; }
|
|
54 extern (D) int WIFCONTINUED( int status ) { return status == __W_CONTINUED; }
|
|
55 extern (D) bool WIFEXITED( int status ) { return __WTERMSIG( status ) == 0; }
|
|
56 extern (D) bool WIFSIGNALED( int status )
|
|
57 {
|
|
58 return ( cast(byte) ( ( status & 0x7F ) + 1 ) >> 1 ) > 0;
|
|
59 }
|
|
60 extern (D) bool WIFSTOPPED( int status ) { return ( status & 0xFF ) == 0x7F; }
|
|
61 extern (D) int WSTOPSIG( int status ) { return WEXITSTATUS( status ); }
|
|
62 extern (D) int WTERMSIG( int status ) { return status & 0x7F; }
|
|
63 }
|
|
64 else version( darwin )
|
|
65 {
|
|
66 const WNOHANG = 1;
|
|
67 const WUNTRACED = 2;
|
|
68
|
|
69 private
|
|
70 {
|
|
71 const _WSTOPPED = 0177;
|
|
72 }
|
|
73
|
|
74 extern (D) int _WSTATUS(int status) { return (status & 0177); }
|
|
75 extern (D) int WEXITSTATUS( int status ) { return (status >> 8); }
|
|
76 extern (D) int WIFCONTINUED( int status ) { return status == 0x13; }
|
|
77 extern (D) bool WIFEXITED( int status ) { return _WSTATUS(status) == 0; }
|
|
78 extern (D) bool WIFSIGNALED( int status )
|
|
79 {
|
|
80 return _WSTATUS( status ) != _WSTOPPED && _WSTATUS( status ) != 0;
|
|
81 }
|
|
82 extern (D) bool WIFSTOPPED( int status ) { return _WSTATUS( status ) == _WSTOPPED; }
|
|
83 extern (D) int WSTOPSIG( int status ) { return status >> 8; }
|
|
84 extern (D) int WTERMSIG( int status ) { return _WSTATUS( status ); }
|
|
85 }
|
|
86 else
|
|
87 {
|
|
88 static assert( false );
|
|
89 }
|
|
90
|
|
91 pid_t wait(int*);
|
|
92 pid_t waitpid(pid_t, int*, int);
|
|
93
|
|
94 //
|
|
95 // XOpen (XSI)
|
|
96 //
|
|
97 /*
|
|
98 WEXITED
|
|
99 WSTOPPED
|
|
100 WCONTINUED
|
|
101 WNOHANG
|
|
102 WNOWAIT
|
|
103
|
|
104 enum idtype_t
|
|
105 {
|
|
106 P_ALL,
|
|
107 P_PID,
|
|
108 P_PGID
|
|
109 }
|
|
110
|
|
111 int waitid(idtype_t, id_t, siginfo_t*, int);
|
|
112 */
|