1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "process_helper.h" 17 18#include <map> 19#include <sys/sysctl.h> 20 21namespace Commonlibrary::Platform { 22 23#define MACOS_ARG_MAX 4096 24#define MACOS_NOT_EXIST (-1) 25 26enum class SYSArgUnix : uint8_t { 27 SC_ARG_MAX = 0, // kernel 28 SC_CHILD_MAX = 1, 29 SC_CLK_TCK = 2, 30 SC_NGROUPS_MAX = 3, 31 SC_OPEN_MAX = 4, 32 SC_STREAM_MAX = 5, 33 SC_TZNAME_MAX = 6, 34 SC_JOB_CONTROL = 7, 35 SC_SAVED_IDS = 8, 36 SC_REALTIME_SIGNALS = 9, 37 SC_PRIORITY_SCHEDULING = 10, 38 SC_TIMERS = 11, 39 SC_ASYNCHRONOUS_IO = 12, 40 SC_PRIORITIZED_IO = 13, 41 SC_SYNCHRONIZED_IO = 14, 42 SC_FSYNC = 15, 43 SC_MAPPED_FILES = 16, 44 SC_MEMLOCK = 17, 45 SC_MEMLOCK_RANGE = 18, 46 SC_MEMORY_PROTECTION = 19, 47 SC_MESSAGE_PASSING = 20, 48 SC_SEMAPHORES = 21, 49 SC_SHARED_MEMORY_OBJECTS = 22, 50 SC_AIO_LISTIO_MAX = 23, 51 SC_AIO_MAX = 24, 52 SC_AIO_PRIO_DELTA_MAX = 25, 53 SC_DELAYTIMER_MAX = 26, 54 SC_MQ_OPEN_MAX = 27, 55 SC_MQ_PRIO_MAX = 28, 56 SC_VERSION = 29, 57 SC_PAGESIZE = 30, // same with _SC_PAGE_SIZE in unix 58 SC_RTSIG_MAX = 31, 59 SC_SEM_NSEMS_MAX = 32, 60 SC_SEM_VALUE_MAX = 33, 61 SC_SIGQUEUE_MAX = 34, 62 SC_TIMER_MAX = 35, 63 SC_BC_BASE_MAX = 36, 64 SC_BC_DIM_MAX = 37, 65 SC_BC_SCALE_MAX = 38, 66 SC_BC_STRING_MAX = 39, 67 SC_COLL_WEIGHTS_MAX = 40, 68 SC_EXPR_NEST_MAX = 42, 69 SC_LINE_MAX = 43, 70 SC_RE_DUP_MAX = 44, 71 SC_2_VERSION = 46, 72 SC_2_C_BIND = 47, 73 SC_2_C_DEV = 48, 74 SC_2_FORT_DEV = 49, 75 SC_2_FORT_RUN = 50, 76 SC_2_SW_DEV = 51, 77 SC_2_LOCALEDEF = 52, 78 SC_IOV_MAX = 60, // same with _SC_UIO_MAXIOV in unix 79 SC_THREADS = 67, 80 SC_THREAD_SAFE_FUNCTIONS = 68, 81 SC_GETGR_R_SIZE_MAX = 69, 82 SC_GETPW_R_SIZE_MAX = 70, 83 SC_LOGIN_NAME_MAX = 71, 84 SC_TTY_NAME_MAX = 72, 85 SC_THREAD_DESTRUCTOR_ITERATIONS = 73, 86 SC_THREAD_KEYS_MAX = 74, 87 SC_THREAD_STACK_MIN = 75, 88 SC_THREAD_THREADS_MAX = 76, 89 SC_THREAD_ATTR_STACKADDR = 77, 90 SC_THREAD_ATTR_STACKSIZE = 78, 91 SC_THREAD_PRIORITY_SCHEDULING = 79, 92 SC_THREAD_PRIO_INHERIT = 80, 93 SC_THREAD_PRIO_PROTECT = 81, 94 SC_THREAD_PROCESS_SHARED = 82, 95 SC_NPROCESSORS_CONF = 83, 96 SC_NPROCESSORS_ONLN = 84, 97 SC_PHYS_PAGES = 85, 98 SC_AVPHYS_PAGES = 86, 99 SC_ATEXIT_MAX = 87, 100 SC_PASS_MAX = 88, 101 SC_XOPEN_VERSION = 89, 102 SC_XOPEN_XCU_VERSION = 90, 103 SC_XOPEN_UNIX = 91, 104 SC_XOPEN_CRYPT = 92, 105 SC_XOPEN_ENH_I18N = 93, 106 SC_XOPEN_SHM = 94, 107 SC_2_CHAR_TERM = 95, 108 SC_2_UPE = 97, 109 SC_XOPEN_XPG2 = 98, 110 SC_XOPEN_XPG3 = 99, 111 SC_XOPEN_XPG4 = 100, 112 SC_NZERO = 109, 113 SC_XBS5_ILP32_OFF32 = 125, 114 SC_XBS5_ILP32_OFFBIG = 126, 115 SC_XBS5_LP64_OFF64 = 127, 116 SC_XBS5_LPBIG_OFFBIG = 128, 117 SC_XOPEN_LEGACY = 129, 118 SC_XOPEN_REALTIME = 130, 119 SC_XOPEN_REALTIME_THREADS = 131, 120 SC_ADVISORY_INFO = 132, 121 SC_BARRIERS = 133, 122 SC_CLOCK_SELECTION = 137, 123 SC_CPUTIME = 138, 124 SC_THREAD_CPUTIME = 139, 125 SC_MONOTONIC_CLOCK = 149, 126 SC_READER_WRITER_LOCKS = 153, 127 SC_SPIN_LOCKS = 154, 128 SC_REGEXP = 155, 129 SC_SHELL = 157, 130 SC_SPAWN = 159, 131 SC_SPORADIC_SERVER = 160, 132 SC_THREAD_SPORADIC_SERVER = 161, 133 SC_TIMEOUTS = 164, 134 SC_TYPED_MEMORY_OBJECTS = 165, 135 SC_2_PBS = 168, 136 SC_2_PBS_ACCOUNTING = 169, 137 SC_2_PBS_LOCATE = 170, 138 SC_2_PBS_MESSAGE = 171, 139 SC_2_PBS_TRACK = 172, 140 SC_SYMLOOP_MAX = 173, 141 SC_STREAMS = 174, 142 SC_2_PBS_CHECKPOINT = 175, 143 SC_V6_ILP32_OFF32 = 176, 144 SC_V6_ILP32_OFFBIG = 177, 145 SC_V6_LP64_OFF64 = 178, 146 SC_V6_LPBIG_OFFBIG = 179, 147 SC_HOST_NAME_MAX = 180, 148 SC_TRACE = 181, 149 SC_TRACE_EVENT_FILTER = 182, 150 SC_TRACE_INHERIT = 183, 151 SC_TRACE_LOG = 184, 152 SC_IPV6 = 235, 153 SC_RAW_SOCKETS = 236, 154 SC_V7_ILP32_OFF32 = 237, 155 SC_V7_ILP32_OFFBIG = 238, 156 SC_V7_LP64_OFF64 = 239, 157 SC_V7_LPBIG_OFFBIG = 240, 158 SC_SS_REPL_MAX = 241, 159 SC_TRACE_EVENT_NAME_MAX = 242, 160 SC_TRACE_NAME_MAX = 243, 161 SC_TRACE_SYS_MAX = 244, 162 SC_TRACE_USER_EVENT_MAX = 245, 163 SC_XOPEN_STREAMS = 246, 164 SC_THREAD_ROBUST_PRIO_INHERIT = 247, 165 SC_THREAD_ROBUST_PRIO_PROTECT = 248 166}; 167 168enum class SYSArgMacOS : uint16_t { 169 SC_ARG_MAX = 1, 170 SC_CHILD_MAX = 2, 171 SC_CLK_TCK = 3, 172 SC_NGROUPS_MAX = 4, 173 SC_OPEN_MAX = 5, 174 SC_JOB_CONTROL = 6, 175 SC_SAVED_IDS = 7, 176 SC_VERSION = 8, 177 SC_BC_BASE_MAX = 9, 178 SC_BC_DIM_MAX = 10, 179 SC_BC_SCALE_MAX = 11, 180 SC_BC_STRING_MAX = 12, 181 SC_COLL_WEIGHTS_MAX = 13, 182 SC_EXPR_NEST_MAX = 14, 183 SC_LINE_MAX = 15, 184 SC_RE_DUP_MAX = 16, 185 SC_2_VERSION = 17, 186 SC_2_C_BIND = 18, 187 SC_2_C_DEV = 19, 188 SC_2_CHAR_TERM = 20, 189 SC_2_FORT_DEV = 21, 190 SC_2_FORT_RUN = 22, 191 SC_2_LOCALEDEF = 23, 192 SC_2_SW_DEV = 24, 193 SC_2_UPE = 25, 194 SC_STREAM_MAX = 26, 195 SC_TZNAME_MAX = 27, 196 SC_ASYNCHRONOUS_IO = 28, 197 SC_PAGESIZE = 29, // same with _SC_PAGE_SIZE in mac platform 198 SC_MEMLOCK = 30, 199 SC_MEMLOCK_RANGE = 31, 200 SC_MEMORY_PROTECTION = 32, 201 SC_MESSAGE_PASSING = 33, 202 SC_PRIORITIZED_IO = 34, 203 SC_PRIORITY_SCHEDULING = 35, 204 SC_REALTIME_SIGNALS = 36, 205 SC_SEMAPHORES = 37, 206 SC_FSYNC = 38, 207 SC_SHARED_MEMORY_OBJECTS = 39, 208 SC_SYNCHRONIZED_IO = 40, 209 SC_TIMERS = 41, 210 SC_AIO_LISTIO_MAX = 42, 211 SC_AIO_MAX = 43, 212 SC_AIO_PRIO_DELTA_MAX = 44, 213 SC_DELAYTIMER_MAX = 45, 214 SC_MQ_OPEN_MAX = 46, 215 SC_MAPPED_FILES = 47, 216 SC_RTSIG_MAX = 48, 217 SC_SEM_NSEMS_MAX = 49, 218 SC_SEM_VALUE_MAX = 50, 219 SC_SIGQUEUE_MAX = 51, 220 SC_TIMER_MAX = 52, 221 SC_NPROCESSORS_CONF = 57, 222 SC_NPROCESSORS_ONLN = 58, 223 SC_2_PBS = 59, 224 SC_2_PBS_ACCOUNTING = 60, 225 SC_2_PBS_CHECKPOINT = 61, 226 SC_2_PBS_LOCATE = 62, 227 SC_2_PBS_MESSAGE = 63, 228 SC_2_PBS_TRACK = 64, 229 SC_ADVISORY_INFO = 65, 230 SC_BARRIERS = 66, 231 SC_CLOCK_SELECTION = 67, 232 SC_CPUTIME = 68, 233 SC_FILE_LOCKING = 69, 234 SC_GETGR_R_SIZE_MAX = 70, 235 SC_GETPW_R_SIZE_MAX = 71, 236 SC_HOST_NAME_MAX = 72, 237 SC_LOGIN_NAME_MAX = 73, 238 SC_MONOTONIC_CLOCK = 74, 239 SC_MQ_PRIO_MAX = 75, 240 SC_READER_WRITER_LOCKS = 76, 241 SC_REGEXP = 77, 242 SC_SHELL = 78, 243 SC_SPAWN = 79, 244 SC_SPIN_LOCKS = 80, 245 SC_SPORADIC_SERVER = 81, 246 SC_THREAD_ATTR_STACKADDR = 82, 247 SC_THREAD_ATTR_STACKSIZE = 83, 248 SC_THREAD_CPUTIME = 84, 249 SC_THREAD_DESTRUCTOR_ITERATIONS = 85, 250 SC_THREAD_KEYS_MAX = 86, 251 SC_THREAD_PRIO_INHERIT = 87, 252 SC_THREAD_PRIO_PROTECT = 88, 253 SC_THREAD_PRIORITY_SCHEDULING = 89, 254 SC_THREAD_PROCESS_SHARED = 90, 255 SC_THREAD_SAFE_FUNCTIONS = 91, 256 SC_THREAD_SPORADIC_SERVER = 92, 257 SC_THREAD_STACK_MIN = 93, 258 SC_THREAD_THREADS_MAX = 94, 259 SC_TIMEOUTS = 95, 260 SC_THREADS = 96, 261 SC_TRACE = 97, 262 SC_TRACE_EVENT_FILTER = 98, 263 SC_TRACE_INHERIT = 99, 264 SC_TRACE_LOG = 100, 265 SC_TTY_NAME_MAX = 101, 266 SC_TYPED_MEMORY_OBJECTS = 102, 267 SC_V6_ILP32_OFF32 = 103, 268 SC_V6_ILP32_OFFBIG = 104, 269 SC_V6_LP64_OFF64 = 105, 270 SC_V6_LPBIG_OFFBIG = 106, 271 SC_IPV6 = 118, 272 SC_RAW_SOCKETS = 119, 273 SC_SYMLOOP_MAX = 120, 274 SC_ATEXIT_MAX = 107, 275 SC_IOV_MAX = 56, 276 SC_XOPEN_CRYPT = 108, 277 SC_XOPEN_ENH_I18N = 109, 278 SC_XOPEN_LEGACY = 110, 279 SC_XOPEN_REALTIME = 111, 280 SC_XOPEN_REALTIME_THREADS = 112, 281 SC_XOPEN_SHM = 113, 282 SC_XOPEN_STREAMS = 114, 283 SC_XOPEN_UNIX = 115, 284 SC_XOPEN_VERSION = 116, 285 SC_XOPEN_XCU_VERSION = 121, 286 SC_XBS5_ILP32_OFF32 = 122, 287 SC_XBS5_ILP32_OFFBIG = 123, 288 SC_XBS5_LP64_OFF64 = 124, 289 SC_XBS5_LPBIG_OFFBIG = 125, 290 SC_SS_REPL_MAX = 126, 291 SC_TRACE_EVENT_NAME_MAX = 127, 292 SC_TRACE_NAME_MAX = 128, 293 SC_TRACE_SYS_MAX = 129, 294 SC_TRACE_USER_EVENT_MAX = 130, 295 SC_PASS_MAX = 131, 296 SC_PHYS_PAGES = 200 297}; 298 299std::map<SYSArgUnix, SYSArgMacOS> sysconfig_map = { 300 {SYSArgUnix::SC_ARG_MAX, SYSArgMacOS::SC_ARG_MAX}, 301 {SYSArgUnix::SC_CHILD_MAX, SYSArgMacOS::SC_CHILD_MAX}, 302 {SYSArgUnix::SC_CLK_TCK, SYSArgMacOS::SC_CLK_TCK}, 303 {SYSArgUnix::SC_NGROUPS_MAX, SYSArgMacOS::SC_NGROUPS_MAX}, 304 {SYSArgUnix::SC_OPEN_MAX, SYSArgMacOS::SC_OPEN_MAX}, 305 {SYSArgUnix::SC_STREAM_MAX, SYSArgMacOS::SC_STREAM_MAX}, 306 {SYSArgUnix::SC_TZNAME_MAX, SYSArgMacOS::SC_TZNAME_MAX}, 307 {SYSArgUnix::SC_JOB_CONTROL, SYSArgMacOS::SC_JOB_CONTROL}, 308 {SYSArgUnix::SC_SAVED_IDS, SYSArgMacOS::SC_SAVED_IDS}, 309 {SYSArgUnix::SC_REALTIME_SIGNALS, SYSArgMacOS::SC_REALTIME_SIGNALS}, 310 {SYSArgUnix::SC_PRIORITY_SCHEDULING, SYSArgMacOS::SC_PRIORITY_SCHEDULING}, 311 {SYSArgUnix::SC_TIMERS, SYSArgMacOS::SC_TIMERS}, 312 {SYSArgUnix::SC_ASYNCHRONOUS_IO, SYSArgMacOS::SC_ASYNCHRONOUS_IO}, 313 {SYSArgUnix::SC_PRIORITIZED_IO, SYSArgMacOS::SC_PRIORITIZED_IO}, 314 {SYSArgUnix::SC_SYNCHRONIZED_IO, SYSArgMacOS::SC_SYNCHRONIZED_IO}, 315 {SYSArgUnix::SC_FSYNC, SYSArgMacOS::SC_FSYNC}, 316 {SYSArgUnix::SC_MAPPED_FILES, SYSArgMacOS::SC_MAPPED_FILES}, 317 {SYSArgUnix::SC_MEMLOCK, SYSArgMacOS::SC_MEMLOCK}, 318 {SYSArgUnix::SC_MEMLOCK_RANGE, SYSArgMacOS::SC_MEMLOCK_RANGE}, 319 {SYSArgUnix::SC_MEMORY_PROTECTION, SYSArgMacOS::SC_MEMORY_PROTECTION}, 320 {SYSArgUnix::SC_MESSAGE_PASSING, SYSArgMacOS::SC_MESSAGE_PASSING}, 321 {SYSArgUnix::SC_SEMAPHORES, SYSArgMacOS::SC_SEMAPHORES}, 322 {SYSArgUnix::SC_SHARED_MEMORY_OBJECTS, SYSArgMacOS::SC_SHARED_MEMORY_OBJECTS}, 323 {SYSArgUnix::SC_AIO_LISTIO_MAX, SYSArgMacOS::SC_AIO_LISTIO_MAX}, 324 {SYSArgUnix::SC_AIO_MAX, SYSArgMacOS::SC_AIO_MAX}, 325 {SYSArgUnix::SC_AIO_PRIO_DELTA_MAX, SYSArgMacOS::SC_AIO_PRIO_DELTA_MAX}, 326 {SYSArgUnix::SC_DELAYTIMER_MAX, SYSArgMacOS::SC_DELAYTIMER_MAX}, 327 {SYSArgUnix::SC_MQ_OPEN_MAX, SYSArgMacOS::SC_MQ_OPEN_MAX}, 328 {SYSArgUnix::SC_MQ_PRIO_MAX, SYSArgMacOS::SC_MQ_PRIO_MAX}, 329 {SYSArgUnix::SC_VERSION, SYSArgMacOS::SC_VERSION}, 330 {SYSArgUnix::SC_PAGESIZE, SYSArgMacOS::SC_PAGESIZE}, 331 {SYSArgUnix::SC_RTSIG_MAX, SYSArgMacOS::SC_RTSIG_MAX}, 332 {SYSArgUnix::SC_SEM_NSEMS_MAX, SYSArgMacOS::SC_SEM_NSEMS_MAX}, 333 {SYSArgUnix::SC_SEM_VALUE_MAX, SYSArgMacOS::SC_SEM_VALUE_MAX}, 334 {SYSArgUnix::SC_SIGQUEUE_MAX, SYSArgMacOS::SC_SIGQUEUE_MAX}, 335 {SYSArgUnix::SC_TIMER_MAX, SYSArgMacOS::SC_TIMER_MAX}, 336 {SYSArgUnix::SC_BC_BASE_MAX, SYSArgMacOS::SC_BC_BASE_MAX}, 337 {SYSArgUnix::SC_BC_DIM_MAX, SYSArgMacOS::SC_BC_DIM_MAX}, 338 {SYSArgUnix::SC_BC_SCALE_MAX, SYSArgMacOS::SC_BC_SCALE_MAX}, 339 {SYSArgUnix::SC_BC_STRING_MAX, SYSArgMacOS::SC_BC_STRING_MAX}, 340 {SYSArgUnix::SC_COLL_WEIGHTS_MAX, SYSArgMacOS::SC_COLL_WEIGHTS_MAX}, 341 {SYSArgUnix::SC_EXPR_NEST_MAX, SYSArgMacOS::SC_EXPR_NEST_MAX}, 342 {SYSArgUnix::SC_LINE_MAX, SYSArgMacOS::SC_LINE_MAX}, 343 {SYSArgUnix::SC_RE_DUP_MAX, SYSArgMacOS::SC_RE_DUP_MAX}, 344 {SYSArgUnix::SC_2_VERSION, SYSArgMacOS::SC_2_VERSION}, 345 {SYSArgUnix::SC_2_C_BIND, SYSArgMacOS::SC_2_C_BIND}, 346 {SYSArgUnix::SC_2_C_DEV, SYSArgMacOS::SC_2_C_DEV}, 347 {SYSArgUnix::SC_2_FORT_DEV, SYSArgMacOS::SC_2_FORT_DEV}, 348 {SYSArgUnix::SC_2_FORT_RUN, SYSArgMacOS::SC_2_FORT_RUN}, 349 {SYSArgUnix::SC_2_SW_DEV, SYSArgMacOS::SC_2_SW_DEV}, 350 {SYSArgUnix::SC_2_LOCALEDEF, SYSArgMacOS::SC_2_LOCALEDEF}, 351 {SYSArgUnix::SC_IOV_MAX, SYSArgMacOS::SC_IOV_MAX}, 352 {SYSArgUnix::SC_THREADS, SYSArgMacOS::SC_THREADS}, 353 {SYSArgUnix::SC_THREAD_SAFE_FUNCTIONS, SYSArgMacOS::SC_THREAD_SAFE_FUNCTIONS}, 354 {SYSArgUnix::SC_GETGR_R_SIZE_MAX, SYSArgMacOS::SC_GETGR_R_SIZE_MAX}, 355 {SYSArgUnix::SC_GETPW_R_SIZE_MAX, SYSArgMacOS::SC_GETPW_R_SIZE_MAX}, 356 {SYSArgUnix::SC_LOGIN_NAME_MAX, SYSArgMacOS::SC_LOGIN_NAME_MAX}, 357 {SYSArgUnix::SC_TTY_NAME_MAX, SYSArgMacOS::SC_TTY_NAME_MAX}, 358 {SYSArgUnix::SC_THREAD_DESTRUCTOR_ITERATIONS, SYSArgMacOS::SC_THREAD_DESTRUCTOR_ITERATIONS}, 359 {SYSArgUnix::SC_THREAD_KEYS_MAX, SYSArgMacOS::SC_THREAD_KEYS_MAX}, 360 {SYSArgUnix::SC_THREAD_STACK_MIN, SYSArgMacOS::SC_THREAD_STACK_MIN}, 361 {SYSArgUnix::SC_THREAD_THREADS_MAX, SYSArgMacOS::SC_THREAD_THREADS_MAX}, 362 {SYSArgUnix::SC_THREAD_ATTR_STACKADDR, SYSArgMacOS::SC_THREAD_ATTR_STACKADDR}, 363 {SYSArgUnix::SC_THREAD_ATTR_STACKSIZE, SYSArgMacOS::SC_THREAD_ATTR_STACKSIZE}, 364 {SYSArgUnix::SC_THREAD_PRIORITY_SCHEDULING, SYSArgMacOS::SC_THREAD_PRIORITY_SCHEDULING}, 365 {SYSArgUnix::SC_THREAD_PRIO_INHERIT, SYSArgMacOS::SC_THREAD_PRIO_INHERIT}, 366 {SYSArgUnix::SC_THREAD_PRIO_PROTECT, SYSArgMacOS::SC_THREAD_PRIO_PROTECT}, 367 {SYSArgUnix::SC_THREAD_PROCESS_SHARED, SYSArgMacOS::SC_THREAD_PROCESS_SHARED}, 368 {SYSArgUnix::SC_NPROCESSORS_CONF, SYSArgMacOS::SC_NPROCESSORS_CONF}, 369 {SYSArgUnix::SC_NPROCESSORS_ONLN, SYSArgMacOS::SC_NPROCESSORS_ONLN}, 370 {SYSArgUnix::SC_PHYS_PAGES, SYSArgMacOS::SC_PHYS_PAGES}, 371 {SYSArgUnix::SC_ATEXIT_MAX, SYSArgMacOS::SC_ATEXIT_MAX}, 372 {SYSArgUnix::SC_PASS_MAX, SYSArgMacOS::SC_PASS_MAX}, 373 {SYSArgUnix::SC_XOPEN_VERSION, SYSArgMacOS::SC_XOPEN_VERSION}, 374 {SYSArgUnix::SC_XOPEN_XCU_VERSION, SYSArgMacOS::SC_XOPEN_XCU_VERSION}, 375 {SYSArgUnix::SC_XOPEN_UNIX, SYSArgMacOS::SC_XOPEN_UNIX}, 376 {SYSArgUnix::SC_XOPEN_CRYPT, SYSArgMacOS::SC_XOPEN_CRYPT}, 377 {SYSArgUnix::SC_XOPEN_ENH_I18N, SYSArgMacOS::SC_XOPEN_ENH_I18N}, 378 {SYSArgUnix::SC_XOPEN_SHM, SYSArgMacOS::SC_XOPEN_SHM}, 379 {SYSArgUnix::SC_2_CHAR_TERM, SYSArgMacOS::SC_2_CHAR_TERM}, 380 {SYSArgUnix::SC_2_UPE, SYSArgMacOS::SC_2_UPE}, 381 {SYSArgUnix::SC_XBS5_ILP32_OFF32, SYSArgMacOS::SC_XBS5_ILP32_OFF32}, 382 {SYSArgUnix::SC_XBS5_ILP32_OFFBIG, SYSArgMacOS::SC_XBS5_ILP32_OFFBIG}, 383 {SYSArgUnix::SC_XBS5_LP64_OFF64, SYSArgMacOS::SC_XBS5_LP64_OFF64}, 384 {SYSArgUnix::SC_XBS5_LPBIG_OFFBIG, SYSArgMacOS::SC_XBS5_LPBIG_OFFBIG}, 385 {SYSArgUnix::SC_XOPEN_LEGACY, SYSArgMacOS::SC_XOPEN_LEGACY}, 386 {SYSArgUnix::SC_XOPEN_REALTIME, SYSArgMacOS::SC_XOPEN_REALTIME}, 387 {SYSArgUnix::SC_XOPEN_REALTIME_THREADS, SYSArgMacOS::SC_XOPEN_REALTIME_THREADS}, 388 {SYSArgUnix::SC_ADVISORY_INFO, SYSArgMacOS::SC_ADVISORY_INFO}, 389 {SYSArgUnix::SC_BARRIERS, SYSArgMacOS::SC_BARRIERS}, 390 {SYSArgUnix::SC_CLOCK_SELECTION, SYSArgMacOS::SC_CLOCK_SELECTION}, 391 {SYSArgUnix::SC_CPUTIME, SYSArgMacOS::SC_CPUTIME}, 392 {SYSArgUnix::SC_THREAD_CPUTIME, SYSArgMacOS::SC_THREAD_CPUTIME}, 393 {SYSArgUnix::SC_MONOTONIC_CLOCK, SYSArgMacOS::SC_MONOTONIC_CLOCK}, 394 {SYSArgUnix::SC_READER_WRITER_LOCKS, SYSArgMacOS::SC_READER_WRITER_LOCKS}, 395 {SYSArgUnix::SC_SPIN_LOCKS, SYSArgMacOS::SC_SPIN_LOCKS}, 396 {SYSArgUnix::SC_REGEXP, SYSArgMacOS::SC_REGEXP}, 397 {SYSArgUnix::SC_SHELL, SYSArgMacOS::SC_SHELL}, 398 {SYSArgUnix::SC_SPAWN, SYSArgMacOS::SC_SPAWN}, 399 {SYSArgUnix::SC_SPORADIC_SERVER, SYSArgMacOS::SC_SPORADIC_SERVER}, 400 {SYSArgUnix::SC_THREAD_SPORADIC_SERVER, SYSArgMacOS::SC_THREAD_SPORADIC_SERVER}, 401 {SYSArgUnix::SC_TIMEOUTS, SYSArgMacOS::SC_TIMEOUTS}, 402 {SYSArgUnix::SC_TYPED_MEMORY_OBJECTS, SYSArgMacOS::SC_TYPED_MEMORY_OBJECTS}, 403 {SYSArgUnix::SC_2_PBS, SYSArgMacOS::SC_2_PBS}, 404 {SYSArgUnix::SC_2_PBS_ACCOUNTING, SYSArgMacOS::SC_2_PBS_ACCOUNTING}, 405 {SYSArgUnix::SC_2_PBS_LOCATE, SYSArgMacOS::SC_2_PBS_LOCATE}, 406 {SYSArgUnix::SC_2_PBS_MESSAGE, SYSArgMacOS::SC_2_PBS_MESSAGE}, 407 {SYSArgUnix::SC_2_PBS_TRACK, SYSArgMacOS::SC_2_PBS_TRACK}, 408 {SYSArgUnix::SC_SYMLOOP_MAX, SYSArgMacOS::SC_SYMLOOP_MAX}, 409 {SYSArgUnix::SC_2_PBS_CHECKPOINT, SYSArgMacOS::SC_2_PBS_CHECKPOINT}, 410 {SYSArgUnix::SC_V6_ILP32_OFF32, SYSArgMacOS::SC_V6_ILP32_OFF32}, 411 {SYSArgUnix::SC_V6_ILP32_OFFBIG, SYSArgMacOS::SC_V6_ILP32_OFFBIG}, 412 {SYSArgUnix::SC_V6_LP64_OFF64, SYSArgMacOS::SC_V6_LP64_OFF64}, 413 {SYSArgUnix::SC_V6_LPBIG_OFFBIG, SYSArgMacOS::SC_V6_LPBIG_OFFBIG}, 414 {SYSArgUnix::SC_HOST_NAME_MAX, SYSArgMacOS::SC_HOST_NAME_MAX}, 415 {SYSArgUnix::SC_TRACE, SYSArgMacOS::SC_TRACE}, 416 {SYSArgUnix::SC_TRACE_EVENT_FILTER, SYSArgMacOS::SC_TRACE_EVENT_FILTER}, 417 {SYSArgUnix::SC_TRACE_INHERIT, SYSArgMacOS::SC_TRACE_INHERIT}, 418 {SYSArgUnix::SC_TRACE_LOG, SYSArgMacOS::SC_TRACE_LOG}, 419 {SYSArgUnix::SC_IPV6, SYSArgMacOS::SC_IPV6}, 420 {SYSArgUnix::SC_RAW_SOCKETS, SYSArgMacOS::SC_RAW_SOCKETS}, 421 {SYSArgUnix::SC_SS_REPL_MAX, SYSArgMacOS::SC_SS_REPL_MAX}, 422 {SYSArgUnix::SC_TRACE_EVENT_NAME_MAX, SYSArgMacOS::SC_TRACE_EVENT_NAME_MAX}, 423 {SYSArgUnix::SC_TRACE_NAME_MAX, SYSArgMacOS::SC_TRACE_NAME_MAX}, 424 {SYSArgUnix::SC_TRACE_SYS_MAX, SYSArgMacOS::SC_TRACE_SYS_MAX}, 425 {SYSArgUnix::SC_TRACE_USER_EVENT_MAX, SYSArgMacOS::SC_TRACE_USER_EVENT_MAX}, 426 {SYSArgUnix::SC_XOPEN_STREAMS, SYSArgMacOS::SC_XOPEN_STREAMS}, 427}; 428 429void ProcessExit(int signal) 430{ 431 exit(signal); 432} 433 434int GetSysConfig(int number) 435{ 436 SYSArgUnix unixSysconf = static_cast<SYSArgUnix>(number); 437 if (unixSysconf == SYSArgUnix::SC_ARG_MAX) { 438 return MACOS_ARG_MAX; 439 } 440 uint16_t index = static_cast<uint16_t>(sysconfig_map[unixSysconf]); 441 auto configinfo = static_cast<int32_t>(sysconf(index)); 442 if (configinfo < 0) { 443 HILOG_ERROR("Unable to find this system configuration on MAC platform:[unix]%d", unixSysconf); 444 return MACOS_NOT_EXIST; 445 } 446 return configinfo; 447} 448 449double GetSysTimer() 450{ 451 struct timeval boottime; 452 struct timeval now; 453 struct timezone tz; 454 int mib[2] = { CTL_KERN, KERN_BOOTTIME }; 455 size_t size = sizeof(boottime); 456 gettimeofday(&now, &tz); 457 double systimer = -1; 458#define MIB_SIZE 2 459#define MICROSECONDS_OF_SECOND (1000.0*1000.0) 460 if (sysctl(mib, MIB_SIZE, &boottime, &size, NULL, 0) != -1 && boottime.tv_sec != 0) { 461 systimer = now.tv_sec - boottime.tv_sec; 462 systimer += (double)(now.tv_usec - boottime.tv_usec) / MICROSECONDS_OF_SECOND; 463 } 464 return systimer; 465} 466 467int GetThreadId() 468{ 469 uint64_t proTid; 470 pthread_threadid_np(0, &proTid); 471 return proTid; 472} 473 474int GetThreadPRY(int tid) 475{ 476 int32_t pri = getpriority(PRIO_DARWIN_THREAD, 0); // 0: current thread 477 return pri; 478} 479 480double GetProcessStartRealtime() 481{ 482 int pid = getpid(); 483 struct kinfo_proc info; 484 size_t size = sizeof(info); 485 int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid}; 486 487 int ret = sysctl(mib, sizeof(mib)/sizeof(*mib), &info, &size, NULL, 0); 488 if (ret == 0) { 489 double tvSec = info.kp_proc.p_un.__p_starttime.tv_sec; 490 double tvUsec = info.kp_proc.p_un.__p_starttime.tv_usec; 491 return tvSec * 1000.0 + tvUsec / 1000.0; // 1000.0 : Calculate milliseconds 492 } 493 return 0; 494} 495} // namespace Commonlibrary::Platform