1 /** 2 * D header file for POSIX. 3 * 4 * Copyright: Copyright Sean Kelly 2005 - 2009. 5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). 6 * Authors: Sean Kelly, Alex Rønne Petersen 7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition 8 */ 9 10 /* Copyright Sean Kelly 2005 - 2009. 11 * Distributed under the Boost Software License, Version 1.0. 12 * (See accompanying file LICENSE or copy at 13 * http://www.boost.org/LICENSE_1_0.txt) 14 */ 15 module core.sys.posix.sys.time; 16 17 import core.sys.posix.config; 18 public import core.sys.posix.sys.types; // for time_t, suseconds_t 19 public import core.sys.posix.sys.select; // for fd_set, FD_CLR() FD_ISSET() FD_SET() FD_ZERO() FD_SETSIZE, select() 20 21 version (OSX) 22 version = Darwin; 23 else version (iOS) 24 version = Darwin; 25 else version (TVOS) 26 version = Darwin; 27 else version (WatchOS) 28 version = Darwin; 29 30 version (linux) public import core.sys.linux.sys.time; 31 32 version (Posix): 33 extern (C) nothrow @nogc: 34 35 // 36 // XOpen (XSI) 37 // 38 /* 39 struct timeval 40 { 41 time_t tv_sec; 42 suseconds_t tv_usec; 43 } 44 45 struct itimerval 46 { 47 timeval it_interval; 48 timeval it_value; 49 } 50 51 ITIMER_REAL 52 ITIMER_VIRTUAL 53 ITIMER_PROF 54 55 int getitimer(int, itimerval*); 56 int gettimeofday(timeval*, void*); 57 int select(int, fd_set*, fd_set*, fd_set*, timeval*); (defined in core.sys.posix.sys.signal) 58 int setitimer(int, const scope itimerval*, itimerval*); 59 int utimes(const scope char*, ref const(timeval)[2]); // LEGACY 60 */ 61 62 version (CRuntime_Glibc) 63 { 64 struct timeval 65 { 66 time_t tv_sec; 67 suseconds_t tv_usec; 68 } 69 70 struct itimerval 71 { 72 timeval it_interval; 73 timeval it_value; 74 } 75 76 enum ITIMER_REAL = 0; 77 enum ITIMER_VIRTUAL = 1; 78 enum ITIMER_PROF = 2; 79 80 int getitimer(int, itimerval*); 81 int gettimeofday(timeval*, void*); 82 int setitimer(int, const scope itimerval*, itimerval*); 83 int utimes(const scope char*, ref const(timeval)[2]); // LEGACY 84 } 85 else version (CRuntime_Musl) 86 { 87 struct timeval 88 { 89 time_t tv_sec; 90 suseconds_t tv_usec; 91 } 92 pragma(mangle, muslRedirTime64Mangle!("gettimeofday", "__gettimeofday_time64")) 93 int gettimeofday(timeval*, void*); 94 pragma(mangle, muslRedirTime64Mangle!("utimes", "__utimes_time64")) 95 int utimes(const scope char*, ref const(timeval)[2]); 96 } 97 else version (Darwin) 98 { 99 struct timeval 100 { 101 time_t tv_sec; 102 suseconds_t tv_usec; 103 } 104 105 struct itimerval 106 { 107 timeval it_interval; 108 timeval it_value; 109 } 110 111 // non-standard 112 struct timezone_t 113 { 114 int tz_minuteswest; 115 int tz_dsttime; 116 } 117 118 int getitimer(int, itimerval*); 119 int gettimeofday(timeval*, timezone_t*); // timezone_t* is normally void* 120 int setitimer(int, const scope itimerval*, itimerval*); 121 int utimes(const scope char*, ref const(timeval)[2]); 122 } 123 else version (FreeBSD) 124 { 125 struct timeval 126 { 127 time_t tv_sec; 128 suseconds_t tv_usec; 129 } 130 131 struct itimerval 132 { 133 timeval it_interval; 134 timeval it_value; 135 } 136 137 // non-standard 138 struct timezone_t 139 { 140 int tz_minuteswest; 141 int tz_dsttime; 142 } 143 144 int getitimer(int, itimerval*); 145 int gettimeofday(timeval*, timezone_t*); // timezone_t* is normally void* 146 int setitimer(int, const scope itimerval*, itimerval*); 147 int utimes(const scope char*, ref const(timeval)[2]); 148 } 149 else version (NetBSD) 150 { 151 struct timeval 152 { 153 time_t tv_sec; 154 suseconds_t tv_usec; 155 } 156 157 struct itimerval 158 { 159 timeval it_interval; 160 timeval it_value; 161 } 162 163 int getitimer(int, itimerval*); 164 int gettimeofday(timeval*, void*); // timezone_t* is normally void* 165 int setitimer(int, const scope itimerval*, itimerval*); 166 int utimes(const scope char*, ref const(timeval)[2]); 167 } 168 else version (OpenBSD) 169 { 170 struct timeval 171 { 172 time_t tv_sec; 173 suseconds_t tv_usec; 174 } 175 176 struct itimerval 177 { 178 timeval it_interval; 179 timeval it_value; 180 } 181 182 // non-standard 183 struct timezone_t 184 { 185 int tz_minuteswest; 186 int tz_dsttime; 187 } 188 189 int getitimer(int, itimerval*); 190 int gettimeofday(timeval*, timezone_t*); 191 int setitimer(int, const scope itimerval*, itimerval*); 192 int utimes(const scope char*, ref const(timeval)[2]); 193 } 194 else version (DragonFlyBSD) 195 { 196 struct timeval 197 { 198 time_t tv_sec; 199 suseconds_t tv_usec; 200 } 201 202 struct itimerval 203 { 204 timeval it_interval; 205 timeval it_value; 206 } 207 208 // non-standard 209 struct timezone_t 210 { 211 int tz_minuteswest; 212 int tz_dsttime; 213 } 214 215 int getitimer(int, itimerval*); 216 int gettimeofday(timeval*, timezone_t*); // timezone_t* is normally void* 217 int setitimer(int, const scope itimerval*, itimerval*); 218 int utimes(const scope char*, ref const(timeval)[2]); 219 } 220 else version (Solaris) 221 { 222 struct timeval 223 { 224 time_t tv_sec; 225 suseconds_t tv_usec; 226 } 227 228 struct itimerval 229 { 230 timeval it_interval; 231 timeval it_value; 232 } 233 234 int getitimer(int, itimerval*); 235 int gettimeofday(timeval*, void*); 236 int setitimer(int, const scope itimerval*, itimerval*); 237 int utimes(const scope char*, ref const(timeval)[2]); 238 } 239 else version (CRuntime_Bionic) 240 { 241 struct timeval 242 { 243 time_t tv_sec; 244 suseconds_t tv_usec; 245 } 246 247 struct itimerval 248 { 249 timeval it_interval; 250 timeval it_value; 251 } 252 253 struct timezone_t 254 { 255 int tz_minuteswest; 256 int tz_dsttime; 257 } 258 259 enum ITIMER_REAL = 0; 260 enum ITIMER_VIRTUAL = 1; 261 enum ITIMER_PROF = 2; 262 263 int getitimer(int, itimerval*); 264 int gettimeofday(timeval*, timezone_t*); 265 int setitimer(int, const scope itimerval*, itimerval*); 266 int utimes(const scope char*, ref const(timeval)[2]); 267 } 268 else version (CRuntime_UClibc) 269 { 270 struct timeval 271 { 272 time_t tv_sec; 273 suseconds_t tv_usec; 274 } 275 276 struct itimerval 277 { 278 timeval it_interval; 279 timeval it_value; 280 } 281 282 enum ITIMER_REAL = 0; 283 enum ITIMER_VIRTUAL = 1; 284 enum ITIMER_PROF = 2; 285 286 int getitimer(int, itimerval*); 287 int gettimeofday(timeval*, void*); 288 int setitimer(int, const scope itimerval*, itimerval*); 289 int utimes(const scope char*, ref const(timeval)[2]); 290 } 291 else 292 { 293 static assert(false, "Unsupported platform"); 294 }