This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 36aefeadfe Documentation: review supported POSIX interfaces in NuttX 36aefeadfe is described below commit 36aefeadfe665a7ba67a7baf0e7f6fb08cf05057 Author: p-szafonimateusz <p-szafonimate...@xiaomi.com> AuthorDate: Mon May 19 13:55:38 2025 +0200 Documentation: review supported POSIX interfaces in NuttX Add a page in the documentation listing supported and unsupported POSIX options. This is the first step to support POSIX Application Environment Profiles. Signed-off-by: p-szafonimateusz <p-szafonimate...@xiaomi.com> --- Documentation/index.rst | 1 + Documentation/standards/index.rst | 8 + Documentation/standards/posix.rst | 3347 +++++++++++++++++++++++++++++++++++++ 3 files changed, 3356 insertions(+) diff --git a/Documentation/index.rst b/Documentation/index.rst index ed213834d4..1443b32636 100644 --- a/Documentation/index.rst +++ b/Documentation/index.rst @@ -38,6 +38,7 @@ Last Updated: |today| faq/index.rst debugging/index.rst guides/index.rst + standards/index.rst glossary.rst logos/index.rst _tags/tagsindex.rst diff --git a/Documentation/standards/index.rst b/Documentation/standards/index.rst new file mode 100644 index 0000000000..878d3d4efb --- /dev/null +++ b/Documentation/standards/index.rst @@ -0,0 +1,8 @@ +========= +Standards +========= + +.. toctree:: + :maxdepth: 2 + + posix.rst diff --git a/Documentation/standards/posix.rst b/Documentation/standards/posix.rst new file mode 100644 index 0000000000..35187b2b4d --- /dev/null +++ b/Documentation/standards/posix.rst @@ -0,0 +1,3347 @@ +===== +POSIX +===== + +Apache NuttX is **not** licensed to use the POSIX trademark. NuttX uses the +POSIX standard as a development guideline only. + +This page summarizes supported POSIX features in NuttX. + +POSIX Subprofiles +================= + +POSIX PSE51 - Minimal +--------------------- + +Units of Functionality Requirements: + ++------------------------------+----------------+---------+ +| Symbol | Support | Remarks | ++==============================+================+=========+ +| POSIX_ADA_LANG_SUPPORT | No | | ++------------------------------+----------------+---------+ +| `POSIX_C_LANG_JUMP`_ | Yes | | ++------------------------------+----------------+---------+ +| `POSIX_C_LANG_SUPPORT`_ | 94/105 [#fn1]_ | | ++------------------------------+----------------+---------+ +| `POSIX_DEVICE_IO`_ | Yes | | ++------------------------------+----------------+---------+ +| `POSIX_FILE_LOCKING`_ | Yes | | ++------------------------------+----------------+---------+ +| `POSIX_SINGLE_PROCESS`_ | 7/9 | | ++------------------------------+----------------+---------+ +| `POSIX_THREADS_BASE`_ | Yes | | ++------------------------------+----------------+---------+ +| `POSIX_THREADS_EXT`_ [#fn2]_ | 2/4 | | ++------------------------------+----------------+---------+ +| `XSI_THREADS_EXT`_ | 2/4 | | ++------------------------------+----------------+---------+ + +.. [#fn1] ``fenv.h`` related functions not supported. +.. [#fn2] In older revisions this was called ``XSI_THREAD_MUTEX_EXT`` + and some of interfaces was moved from ``POSIX_THREADS_EXT`` + to ``POSIX_THREADS_EXT``. + +POSIX.1 Option Requirements: + ++-------------------------------------------------+-------------+----------------------------------+ +|Symbol | Support | Remarks | ++=================================================+=============+==================================+ +|`_POSIX_CLOCK_SELECTION`_ | Yes | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_FSYNC`_ | Yes | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_MEMLOCK`_ | Yes [#fn3]_ | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_MEMLOCK_RANGE`_ | Yes [#fn3]_ | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_MONOTONIC_CLOCK`_ | Yes | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_NO_TRUNC`_ | No | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_REALTIME_SIGNALS`_ | 201712L | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_SEMAPHORES`_ | 201712L | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_SHARED_MEMORY_OBJECTS`_ | 201712L | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_SYNCHRONIZED_IO`_ | Yes | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_THREAD_ATTR_STACKADDR`_ | Yes | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_THREAD_ATTR_STACKSIZE`_ | Yes | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_THREAD_CPUTIME`_ | 201712L | | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_THREAD_PRIO_INHERIT`_ | Yes | ``CONFIG_PRIORITY_INHERITANCE`` | ++-------------------------------------------------+-------------+----------------------------------+ +|`_POSIX_THREAD_PRIO_PROTECT`_ | Yes | ``CONFIG_PRIORITY_PROTECT`` | ++-------------------------------------------------+-------------+----------------------------------+ +| `_POSIX_THREAD_PRIORITY_SCHEDULING`_ | 201712L | | ++-------------------------------------------------+-------------+----------------------------------+ +| `_POSIX_THREAD_SPORADIC_SERVER`_ | Yes | ``CONFIG_SCHED_SPORADIC`` | ++-------------------------------------------------+-------------+----------------------------------+ +| `_POSIX_TIMEOUTS`_ [#fn4]_ | Yes | | ++-------------------------------------------------+-------------+----------------------------------+ +| `_POSIX_TIMERS`_ | Yes | ``!CONFIG_DISABLE_POSIX_TIMERS`` | ++-------------------------------------------------+-------------+----------------------------------+ +| `_POSIX2_C_DEV`_ | Yes [#fn5]_ | | ++-------------------------------------------------+-------------+----------------------------------+ +| `_POSIX2_SW_DEV`_ | Yes [#fn5]_ | | ++-------------------------------------------------+-------------+----------------------------------+ + +.. [#fn3] NuttX provides dummy implementations for ``_POSIX_MEMLOCK`` and + ``_POSIX_MEMLOCK_RANGE`` which is sufficient for devices without MMU, + but doesn't meet the requirement for devices with MMU. +.. [#fn4] Deprecated in new revisions of POSIX. Merged into other base options. +.. [#fn5] Requred only for the development platform. + For PSE54 this requirement is also for execution platform whis is + not supported. + +Requirements for Other Standards: + ++-----------------------------+---------+---------+ +| Symbol | Support | Remarks | ++=============================+=========+=========+ +| POSIX.26 | ? | | ++-----------------------------+---------+---------+ + +POSIX PSE52 - Real-Time Controller +---------------------------------- + +The Realtime Controller System Profile (PSE52) includes all features from PSE51. + +Units of Functionality Requirements: + ++-----------------------------+-------------+---------------------+ +| Symbol | Support | Remarks | ++=============================+=============+=====================+ +| `POSIX_C_LANG_MATH`_ | Yes [#fn6]_ | ``CONFIG_LIBM_XXX`` | ++-----------------------------+-------------+---------------------+ +| `POSIX_FD_MGMT`_ | Yes | | ++-----------------------------+-------------+---------------------+ +| `POSIX_FILE_SYSTEM`_ | Yes | | ++-----------------------------+-------------+---------------------+ + +.. [#fn6] NuttX supports different libm implementations with different sets of + supported functions. libm support in NuttX is controlled by Kconfig + choice option. + +POSIX.1 Option Requirements + ++------------------------------------+---------+----------------------------+ +| Symbol | Support | Remarks | ++====================================+=========+============================+ +| `_POSIX_MAPPED_FILES`_ | 201712L | | ++------------------------------------+---------+----------------------------+ +| `_POSIX_MESSAGE_PASSING`_ | Yes | ``!CONFIG_DISABLE_MQUEUE`` | ++------------------------------------+---------+----------------------------+ +| _POSIX_TRACE [#fn7]_ | No | | ++------------------------------------+---------+----------------------------+ +| _POSIX_TRACE_EVENT_FILTER [#fn7]_ | No | | ++------------------------------------+---------+----------------------------+ +| _POSIX_TRACE_LOG [#fn7]_ | No | | ++------------------------------------+---------+----------------------------+ + +.. [#fn7] ``_POSIX_TRACE*`` are obsolete. + +POSIX PSE53 - Dedicated +----------------------- + +The Dedicated Realtime System Profile (PSE53) includes all features from PSE52 and PSE51. + +Units of Functionality Requirements: + ++-----------------------------+---------+------------------+ +| Symbol | Support | Remarks | ++=============================+=========+==================+ +| POSIX_EVENT_MGMT [#fn8]_ | Yes | | ++-----------------------------+---------+------------------+ +| `POSIX_MULTI_PROCESS`_ | 25/29 | | ++-----------------------------+---------+------------------+ +| `POSIX_NETWORKING`_ | Yes | ``CONFIG_NET`` | ++-----------------------------+---------+------------------+ +| `POSIX_PIPE`_ | Yes | ``CONFIG_PIPES`` | ++-----------------------------+---------+------------------+ +| `POSIX_SIGNAL_JUMP`_ | No | | ++-----------------------------+---------+------------------+ + +.. [#fn8] Deprecated in new revisions of POSIX. + Merged into ``POSIX_DEVICE_IO``. + +POSIX.1 Option Requirements + ++---------------------------------+-------------+---------------------------+ +| Symbol | Support | Remarks | ++=================================+=============+===========================+ +| `_POSIX_ASYNCHRONOUS_IO`_ | 201712L | ``CONFIG_FS_AIO`` | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_CPUTIME`_ | 201712L | | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_MEMORY_PROTECTION`_ | Yes [#fn9]_ | | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_PRIORITIZED_IO`_ | 201712L | | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_PRIORITY_SCHEDULING`_ | Yes | | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_RAW_SOCKETS`_ | Yes | | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_SPAWN`_ | 13/17 | ``CONFIG_BUILD_KERNEL`` | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_SPORADIC_SERVER`_ | Yes | ``CONFIG_SCHED_SPORADIC`` | ++---------------------------------+-------------+---------------------------+ +| `_POSIX_THREAD_PROCESS_SHARED`_ | 201712L | | ++---------------------------------+-------------+---------------------------+ + +.. [#fn9] NuttX provides dummy implementations for ``_POSIX_MEMORY_PROTECTION`` + which is sufficient for devices without MMU, but doesn't meet the + requirement for devices with MMU. + +POSIX PSE54 - Multipurpose +-------------------------- + +The Multipurpose Realtime System Profile (PSE54) includes all features from PSE53, PSE52 and PSE51. + +Units of Functionality Requirements: + ++------------------------------+---------+--------------------------------+ +| Symbol | Support | Remarks | ++==============================+=========+================================+ +| `POSIX_C_LANG_WIDE_CHAR`_ | | | ++------------------------------+---------+--------------------------------+ +| `POSIX_DEVICE_SPECIFIC`_ | 3/15 | ``CONFIG_TERMIOS=y`` | ++------------------------------+---------+--------------------------------+ +| `POSIX_FIFO`_ | Yes | ``CONFIG_DEV_FIFO_SIZE > 0`` | ++------------------------------+---------+--------------------------------+ +| `POSIX_FILE_ATTRIBUTES`_ | Yes | ``CONFIG_PSEUDOFS_ATTRIBUTES`` | ++------------------------------+---------+--------------------------------+ +| `POSIX_FILE_SYSTEM_EXT`_ | Yes | | ++------------------------------+---------+--------------------------------+ +| `POSIX_JOB_CONTROL`_ | 1/4 | | ++------------------------------+---------+--------------------------------+ +| `POSIX_REGEXP`_ | Yes | | ++------------------------------+---------+--------------------------------+ +| `POSIX_SHELL_FUNC`_ | 3/5 | | ++------------------------------+---------+--------------------------------+ +| `POSIX_STRING_MATCHING`_ | Yes | | ++------------------------------+---------+--------------------------------+ +| `POSIX_SYMBOLIC_LINKS`_ | Yes | ``CONFIG_PSEUDOFS_SOFTLINKS`` | ++------------------------------+---------+--------------------------------+ +| `POSIX_SYSTEM_DATABASE`_ | Yes | | ++------------------------------+---------+--------------------------------+ +| `POSIX_USER_GROUPS`_ | 8/10 | | ++------------------------------+---------+--------------------------------+ +| POSIX_WIDE_CHAR_IO [#fn10]_ | | | ++------------------------------+---------+--------------------------------+ +| `XSI_DYNAMIC_LINKING`_ | Yes | | ++------------------------------+---------+--------------------------------+ +| `XSI_SYSTEM_LOGGING`_ | 1/4 | | ++------------------------------+---------+--------------------------------+ + +.. [#fn10] Deprecated in new revision of POSIX. + Moved to ``POSIX_WIDE_CHAR_DEVICE_IO``. + +POSIX.1 Option Requirements + ++-----------------------------+---------+---------+ +| Symbol | Support | Remarks | ++=============================+=========+=========+ +| `_POSIX_ADVISORY_INFO`_ | 2/4 | | ++-----------------------------+---------+---------+ +| `_POSIX_SAVED_IDS`_ | No | | ++-----------------------------+---------+---------+ +| `_POSIX_VDISABLE`_ | No | | ++-----------------------------+---------+---------+ +| `_POSIX2_CHAR_TERM`_ | ? | | ++-----------------------------+---------+---------+ +| `_POSIX2_FORT_RUN`_ | No | | ++-----------------------------+---------+---------+ +| `_POSIX2_UPE`_ | No | | ++-----------------------------+---------+---------+ + +Functionality Requirements +========================== + +POSIX_C_LANG_JUMP +----------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`longjmp` | Yes | ++--------------------------------+---------+ +| :c:func:`setjmp` | Yes | ++--------------------------------+---------+ + +POSIX_C_LANG_SUPPORT +-------------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| abs() | Yes | ++--------------------------------+---------+ +| asctime() | Yes | ++--------------------------------+---------+ +| asctime_r() | Yes | ++--------------------------------+---------+ +| atof() | Yes | ++--------------------------------+---------+ +| atoi() | Yes | ++--------------------------------+---------+ +| atol() | Yes | ++--------------------------------+---------+ +| atoll() | Yes | ++--------------------------------+---------+ +| bsearch() | Yes | ++--------------------------------+---------+ +| calloc() | Yes | ++--------------------------------+---------+ +| ctime() | Yes | ++--------------------------------+---------+ +| ctime_r() | Yes | ++--------------------------------+---------+ +| difftime() | Yes | ++--------------------------------+---------+ +| div() | Yes | ++--------------------------------+---------+ +| feclearexcept() | No | ++--------------------------------+---------+ +| fegetenv() | No | ++--------------------------------+---------+ +| fegetexceptflag() | No | ++--------------------------------+---------+ +| fegetround() | No | ++--------------------------------+---------+ +| feholdexcept() | No | ++--------------------------------+---------+ +| feraiseexcept() | No | ++--------------------------------+---------+ +| fesetenv() | No | ++--------------------------------+---------+ +| fesetexceptflag() | No | ++--------------------------------+---------+ +| fesetround() | No | ++--------------------------------+---------+ +| fetestexcept() | No | ++--------------------------------+---------+ +| feupdateenv() | No | ++--------------------------------+---------+ +| free() | Yes | ++--------------------------------+---------+ +| gmtime() | Yes | ++--------------------------------+---------+ +| gmtime_r() | Yes | ++--------------------------------+---------+ +| imaxabs() | Yes | ++--------------------------------+---------+ +| imaxdiv() | Yes | ++--------------------------------+---------+ +| isalnum() | Yes | ++--------------------------------+---------+ +| isalpha() | Yes | ++--------------------------------+---------+ +| isblank() | Yes | ++--------------------------------+---------+ +| iscntrl() | Yes | ++--------------------------------+---------+ +| isdigit() | Yes | ++--------------------------------+---------+ +| isgraph() | Yes | ++--------------------------------+---------+ +| islower() | Yes | ++--------------------------------+---------+ +| isprint() | Yes | ++--------------------------------+---------+ +| ispunct() | Yes | ++--------------------------------+---------+ +| isspace() | Yes | ++--------------------------------+---------+ +| isupper() | Yes | ++--------------------------------+---------+ +| isxdigit() | Yes | ++--------------------------------+---------+ +| labs() | Yes | ++--------------------------------+---------+ +| ldiv() | Yes | ++--------------------------------+---------+ +| llabs() | Yes | ++--------------------------------+---------+ +| lldiv() | Yes | ++--------------------------------+---------+ +| localeconv() | Yes | ++--------------------------------+---------+ +| localtime() | Yes | ++--------------------------------+---------+ +| localtime_r() | Yes | ++--------------------------------+---------+ +| malloc() | Yes | ++--------------------------------+---------+ +| memchr() | Yes | ++--------------------------------+---------+ +| memcmp() | Yes | ++--------------------------------+---------+ +| memcpy() | Yes | ++--------------------------------+---------+ +| memmove() | Yes | ++--------------------------------+---------+ +| memset() | Yes | ++--------------------------------+---------+ +| mktime() | Yes | ++--------------------------------+---------+ +| qsort() | Yes | ++--------------------------------+---------+ +| rand() | Yes | ++--------------------------------+---------+ +| rand_r() | Yes | ++--------------------------------+---------+ +| realloc() | Yes | ++--------------------------------+---------+ +| setlocale() | Yes | ++--------------------------------+---------+ +| snprintf() | Yes | ++--------------------------------+---------+ +| sprintf() | Yes | ++--------------------------------+---------+ +| srand() | Yes | ++--------------------------------+---------+ +| sscanf() | Yes | ++--------------------------------+---------+ +| strcat() | Yes | ++--------------------------------+---------+ +| strchr() | Yes | ++--------------------------------+---------+ +| strcmp() | Yes | ++--------------------------------+---------+ +| strcoll() | Yes | ++--------------------------------+---------+ +| strcpy() | Yes | ++--------------------------------+---------+ +| strcspn() | Yes | ++--------------------------------+---------+ +| strerror() | Yes | ++--------------------------------+---------+ +| strerror_r() | Yes | ++--------------------------------+---------+ +| strftime() | Yes | ++--------------------------------+---------+ +| strlen() | Yes | ++--------------------------------+---------+ +| strncat() | Yes | ++--------------------------------+---------+ +| strncmp() | Yes | ++--------------------------------+---------+ +| strncpy() | Yes | ++--------------------------------+---------+ +| strpbrk() | Yes | ++--------------------------------+---------+ +| strrchr() | Yes | ++--------------------------------+---------+ +| strspn() | Yes | ++--------------------------------+---------+ +| strstr() | Yes | ++--------------------------------+---------+ +| strtod() | Yes | ++--------------------------------+---------+ +| strtof() | Yes | ++--------------------------------+---------+ +| strtoimax() | Yes | ++--------------------------------+---------+ +| strtok() | Yes | ++--------------------------------+---------+ +| strtok_r() | Yes | ++--------------------------------+---------+ +| strtol() | Yes | ++--------------------------------+---------+ +| strtold() | Yes | ++--------------------------------+---------+ +| strtoll() | Yes | ++--------------------------------+---------+ +| strtoul() | Yes | ++--------------------------------+---------+ +| strtoull() | Yes | ++--------------------------------+---------+ +| strtoumax() | Yes | ++--------------------------------+---------+ +| strxfrm() | Yes | ++--------------------------------+---------+ +| time() | Yes | ++--------------------------------+---------+ +| tolower() | Yes | ++--------------------------------+---------+ +| toupper() | Yes | ++--------------------------------+---------+ +| tzname | Yes | ++--------------------------------+---------+ +| tzset() | Yes | ++--------------------------------+---------+ +| va_arg() | Yes | ++--------------------------------+---------+ +| va_copy() | Yes | ++--------------------------------+---------+ +| va_end() | Yes | ++--------------------------------+---------+ +| va_start() | Yes | ++--------------------------------+---------+ +| vsnprintf() | Yes | ++--------------------------------+---------+ +| vsprintf() | Yes | ++--------------------------------+---------+ +| vsscanf() | Yes | ++--------------------------------+---------+ + +POSIX_DEVICE_IO +--------------- + +Device Input and Output: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`FD_CLR` | Yes | ++--------------------------------+---------+ +| :c:func:`FD_ISSET` | Yes | ++--------------------------------+---------+ +| :c:func:`FD_SET` | Yes | ++--------------------------------+---------+ +| :c:func:`FD_ZERO` | Yes | ++--------------------------------+---------+ +| :c:func:`clearerr` | Yes | ++--------------------------------+---------+ +| :c:func:`close` | Yes | ++--------------------------------+---------+ +| :c:func:`fclose` | Yes | ++--------------------------------+---------+ +| :c:func:`fdopen` | Yes | ++--------------------------------+---------+ +| :c:func:`feof` | Yes | ++--------------------------------+---------+ +| :c:func:`ferror` | Yes | ++--------------------------------+---------+ +| :c:func:`flush` | Yes | ++--------------------------------+---------+ +| :c:func:`fgetc` | Yes | ++--------------------------------+---------+ +| :c:func:`fgets` | Yes | ++--------------------------------+---------+ +| :c:func:`fileno` | Yes | ++--------------------------------+---------+ +| :c:func:`fopen` | Yes | ++--------------------------------+---------+ +| :c:func:`fprintf` | Yes | ++--------------------------------+---------+ +| :c:func:`fputc` | Yes | ++--------------------------------+---------+ +| :c:func:`fputs` | Yes | ++--------------------------------+---------+ +| :c:func:`fread` | Yes | ++--------------------------------+---------+ +| :c:func:`freopen` | Yes | ++--------------------------------+---------+ +| :c:func:`fscanf` | Yes | ++--------------------------------+---------+ +| :c:func:`fwrite` | Yes | ++--------------------------------+---------+ +| :c:func:`getc` | Yes | ++--------------------------------+---------+ +| :c:func:`getchar` | Yes | ++--------------------------------+---------+ +| :c:func:`open` | Yes | ++--------------------------------+---------+ +| :c:func:`perror` | Yes | ++--------------------------------+---------+ +| :c:func:`poll` | Yes | ++--------------------------------+---------+ +| posix_close() | No | ++--------------------------------+---------+ +| :c:func:`ppoll` | Yes | ++--------------------------------+---------+ +| :c:func:`printf` | Yes | ++--------------------------------+---------+ +| :c:func:`pread` | Yes | ++--------------------------------+---------+ +| :c:func:`pselect` | Yes | ++--------------------------------+---------+ +| :c:func:`putc` | Yes | ++--------------------------------+---------+ +| :c:func:`putchar` | Yes | ++--------------------------------+---------+ +| :c:func:`puts` | Yes | ++--------------------------------+---------+ +| :c:func:`pwrite` | Yes | ++--------------------------------+---------+ +| :c:func:`read` | Yes | ++--------------------------------+---------+ +| :c:func:`scanf` | Yes | ++--------------------------------+---------+ +| :c:func:`select` | Yes | ++--------------------------------+---------+ +| :c:func:`setbuf` | Yes | ++--------------------------------+---------+ +| :c:func:`setvbuf` | Yes | ++--------------------------------+---------+ +| stderr | Yes | ++--------------------------------+---------+ +| stdin | Yes | ++--------------------------------+---------+ +| stdout | Yes | ++--------------------------------+---------+ +| :c:func:`ungetc` | Yes | ++--------------------------------+---------+ +| :c:func:`vfprintf` | Yes | ++--------------------------------+---------+ +| :c:func:`vfscanf` | Yes | ++--------------------------------+---------+ +| :c:func:`vprintf` | Yes | ++--------------------------------+---------+ +| :c:func:`vscanf` | Yes | ++--------------------------------+---------+ +| :c:func:`write` | Yes | ++--------------------------------+---------+ + + +POSIX_FILE_LOCKING +------------------ + +Thread-Safe Stdio Locking: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`flockfile` | Yes | ++--------------------------------+---------+ +| :c:func:`ftrylockfile` | Yes | ++--------------------------------+---------+ +| :c:func:`funlockfile` | Yes | ++--------------------------------+---------+ +| :c:func:`getc_unlocked` | Yes | ++--------------------------------+---------+ +| :c:func:`getchar_unlocked` | Yes | ++--------------------------------+---------+ +| :c:func:`putc_unlocked` | Yes | ++--------------------------------+---------+ +| :c:func:`putchar_unlocked` | Yes | ++--------------------------------+---------+ + +POSIX_SINGLE_PROCESS +-------------------- + +Single Process: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| confstr() | No | ++--------------------------------+---------+ +| environ | Yes | ++--------------------------------+---------+ +| errno | Yes | ++--------------------------------+---------+ +| :c:func:`getenv` | Yes | ++--------------------------------+---------+ +| secure_getenv() | No | ++--------------------------------+---------+ +| :c:func:`setenv` | Yes | ++--------------------------------+---------+ +| :c:func:`sysconf` | Yes | ++--------------------------------+---------+ +| :c:func:`uname` | Yes | ++--------------------------------+---------+ +| :c:func:`unsetenv` | Yes | ++--------------------------------+---------+ + +POSIX_THREADS_BASE +------------------ + +Base Threads: + ++-----------------------------------------+---------+ +| API | Support | ++=========================================+=========+ +| :c:func:`pthread_atfork` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_destroy` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_getdetachstate` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_getschedparam` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_init` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_setdetachstate` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_setschedparam` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cancel` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cleanup_pop` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cleanup_push` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cond_broadcast` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cond_clockwait` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cond_destroy` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cond_init` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cond_signal` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cond_timedwait` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_cond_wait` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_condattr_destroy` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_condattr_init` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_create` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_detach` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_equal` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_exit` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_getspecific` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_join` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_key_create` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_key_delete` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_kill` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutex_clocklock` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutex_destroy` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutex_init` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutex_lock` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutex_timedlock` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutex_trylock` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutex_unlock` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutexattr_destroy` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutexattr_init` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_once` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_self` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_setcancelstate` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_setcanceltype` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_setspecific` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_sigmask` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_testcancel` | Yes | ++-----------------------------------------+---------+ +| :c:func:`sched_yield` | Yes | ++-----------------------------------------+---------+ + +POSIX_THREADS_EXT +----------------- + +Extended Threads: + ++-------------------------------------+---------+ +| API | Support | ++=====================================+=========+ +| pthread_attr_getguardsize() | No | ++-------------------------------------+---------+ +| pthread_attr_setguardsize() | No | ++-------------------------------------+---------+ +| :c:func:`pthread_mutexattr_gettype` | Yes | ++-------------------------------------+---------+ +| :c:func:`pthread_mutexattr_settype` | Yes | ++-------------------------------------+---------+ + +POSIX_C_LANG_MATH +----------------- + +Depends on the enabled ``libm`` implementation [#fn11]_. + +Maths Library: + ++--------------------------------+ +| API | ++================================+ +| CMPLX() | ++--------------------------------+ +| CMPLXF() | ++--------------------------------+ +| CMPLXL() | ++--------------------------------+ +| acos() | ++--------------------------------+ +| acosf() | ++--------------------------------+ +| acosh() | ++--------------------------------+ +| acoshf() | ++--------------------------------+ +| acoshl() | ++--------------------------------+ +| acosl() | ++--------------------------------+ +| asin() | ++--------------------------------+ +| asinf() | ++--------------------------------+ +| asinh() | ++--------------------------------+ +| asinhf() | ++--------------------------------+ +| asinhl() | ++--------------------------------+ +| asinl() | ++--------------------------------+ +| atan() | ++--------------------------------+ +| atan2() | ++--------------------------------+ +| atan2f() | ++--------------------------------+ +| atan2l() | ++--------------------------------+ +| atanf() | ++--------------------------------+ +| atanh() | ++--------------------------------+ +| atanhf() | ++--------------------------------+ +| atanhl() | ++--------------------------------+ +| atanl() | ++--------------------------------+ +| cabs() | ++--------------------------------+ +| cabsf() | ++--------------------------------+ +| cabsl() | ++--------------------------------+ +| cacos() | ++--------------------------------+ +| cacosf() | ++--------------------------------+ +| cacosh() | ++--------------------------------+ +| cacoshf() | ++--------------------------------+ +| cacoshl() | ++--------------------------------+ +| cacosl() | ++--------------------------------+ +| carg() | ++--------------------------------+ +| cargf() | ++--------------------------------+ +| cargl() | ++--------------------------------+ +| casin() | ++--------------------------------+ +| casinf() | ++--------------------------------+ +| casinh() | ++--------------------------------+ +| casinhf() | ++--------------------------------+ +| casinhl() | ++--------------------------------+ +| casinl() | ++--------------------------------+ +| catan() | ++--------------------------------+ +| catanf() | ++--------------------------------+ +| catanh() | ++--------------------------------+ +| catanhf() | ++--------------------------------+ +| catanhl() | ++--------------------------------+ +| catanl() | ++--------------------------------+ +| cbrt() | ++--------------------------------+ +| cbrtf() | ++--------------------------------+ +| cbrtl() | ++--------------------------------+ +| ccos() | ++--------------------------------+ +| ccosf() | ++--------------------------------+ +| ccosh() | ++--------------------------------+ +| ccoshf() | ++--------------------------------+ +| ccoshl() | ++--------------------------------+ +| ccosl() | ++--------------------------------+ +| ceil() | ++--------------------------------+ +| ceilf() | ++--------------------------------+ +| ceill() | ++--------------------------------+ +| cexp() | ++--------------------------------+ +| cexpf() | ++--------------------------------+ +| cexpl() | ++--------------------------------+ +| cimag() | ++--------------------------------+ +| cimagf() | ++--------------------------------+ +| cimagl() | ++--------------------------------+ +| clog() | ++--------------------------------+ +| clogf() | ++--------------------------------+ +| clogl() | ++--------------------------------+ +| conj() | ++--------------------------------+ +| conjf() | ++--------------------------------+ +| conjl() | ++--------------------------------+ +| copysign() | ++--------------------------------+ +| copysignf() | ++--------------------------------+ +| copysignl() | ++--------------------------------+ +| cos() | ++--------------------------------+ +| cosf() | ++--------------------------------+ +| cosh() | ++--------------------------------+ +| coshf() | ++--------------------------------+ +| coshl() | ++--------------------------------+ +| cosl() | ++--------------------------------+ +| cpow() | ++--------------------------------+ +| cpowf() | ++--------------------------------+ +| cpowl() | ++--------------------------------+ +| cproj() | ++--------------------------------+ +| cprojf() | ++--------------------------------+ +| cprojl() | ++--------------------------------+ +| creal() | ++--------------------------------+ +| crealf() | ++--------------------------------+ +| creall() | ++--------------------------------+ +| csin() | ++--------------------------------+ +| csinf() | ++--------------------------------+ +| csinh() | ++--------------------------------+ +| csinhf() | ++--------------------------------+ +| csinhl() | ++--------------------------------+ +| csinl() | ++--------------------------------+ +| csqrt() | ++--------------------------------+ +| csqrtf() | ++--------------------------------+ +| csqrtl() | ++--------------------------------+ +| ctan() | ++--------------------------------+ +| ctanf() | ++--------------------------------+ +| ctanh() | ++--------------------------------+ +| ctanhf() | ++--------------------------------+ +| ctanhl() | ++--------------------------------+ +| ctanl() | ++--------------------------------+ +| erf() | ++--------------------------------+ +| erfc() | ++--------------------------------+ +| erfcf() | ++--------------------------------+ +| erfcl() | ++--------------------------------+ +| erff() | ++--------------------------------+ +| erfl() | ++--------------------------------+ +| exp() | ++--------------------------------+ +| exp2() | ++--------------------------------+ +| exp2f() | ++--------------------------------+ +| exp2l() | ++--------------------------------+ +| expf() | ++--------------------------------+ +| expl() | ++--------------------------------+ +| expm1() | ++--------------------------------+ +| expm1f() | ++--------------------------------+ +| expm1l() | ++--------------------------------+ +| fabs() | ++--------------------------------+ +| fabsf() | ++--------------------------------+ +| fabsl() | ++--------------------------------+ +| fdim() | ++--------------------------------+ +| fdimf() | ++--------------------------------+ +| fdiml() | ++--------------------------------+ +| floor() | ++--------------------------------+ +| floorf() | ++--------------------------------+ +| floorl() | ++--------------------------------+ +| fma() | ++--------------------------------+ +| fmaf() | ++--------------------------------+ +| fmal() | ++--------------------------------+ +| fmax() | ++--------------------------------+ +| fmaxf() | ++--------------------------------+ +| fmaxl() | ++--------------------------------+ +| fmin() | ++--------------------------------+ +| fminf() | ++--------------------------------+ +| fminl() | ++--------------------------------+ +| fmod() | ++--------------------------------+ +| fmodf() | ++--------------------------------+ +| fmodl() | ++--------------------------------+ +| fpclassify() | ++--------------------------------+ +| frexp() | ++--------------------------------+ +| frexpf() | ++--------------------------------+ +| frexpl() | ++--------------------------------+ +| hypot() | ++--------------------------------+ +| hypotf() | ++--------------------------------+ +| hypotl() | ++--------------------------------+ +| ilogb() | ++--------------------------------+ +| ilogbf() | ++--------------------------------+ +| ilogbl() | ++--------------------------------+ +| isfinite() | ++--------------------------------+ +| isgreater() | ++--------------------------------+ +| isgreaterequal() | ++--------------------------------+ +| isinf() | ++--------------------------------+ +| isless() | ++--------------------------------+ +| islessequal() | ++--------------------------------+ +| islessgreater() | ++--------------------------------+ +| isnan() | ++--------------------------------+ +| isnormal() | ++--------------------------------+ +| isunordered() | ++--------------------------------+ +| ldexp() | ++--------------------------------+ +| ldexpf() | ++--------------------------------+ +| ldexpl() | ++--------------------------------+ +| lgamma() | ++--------------------------------+ +| lgammaf() | ++--------------------------------+ +| lgammal() | ++--------------------------------+ +| llrint() | ++--------------------------------+ +| llrintf() | ++--------------------------------+ +| llrintl() | ++--------------------------------+ +| llround() | ++--------------------------------+ +| llroundf() | ++--------------------------------+ +| llroundl() | ++--------------------------------+ +| log() | ++--------------------------------+ +| log10() | ++--------------------------------+ +| log10f() | ++--------------------------------+ +| log10l() | ++--------------------------------+ +| log1p() | ++--------------------------------+ +| log1pf() | ++--------------------------------+ +| log1pl() | ++--------------------------------+ +| log2() | ++--------------------------------+ +| log2f() | ++--------------------------------+ +| log2l() | ++--------------------------------+ +| logb() | ++--------------------------------+ +| logbf() | ++--------------------------------+ +| logbl() | ++--------------------------------+ +| logf() | ++--------------------------------+ +| logl() | ++--------------------------------+ +| lrint() | ++--------------------------------+ +| lrintf() | ++--------------------------------+ +| lrintl() | ++--------------------------------+ +| lround() | ++--------------------------------+ +| lroundf() | ++--------------------------------+ +| lroundl() | ++--------------------------------+ +| modf() | ++--------------------------------+ +| modff() | ++--------------------------------+ +| modfl() | ++--------------------------------+ +| nan() | ++--------------------------------+ +| nanf() | ++--------------------------------+ +| nanl() | ++--------------------------------+ +| nearbyint() | ++--------------------------------+ +| nearbyintf() | ++--------------------------------+ +| nearbyintl() | ++--------------------------------+ +| nextafter() | ++--------------------------------+ +| nextafterf() | ++--------------------------------+ +| nextafterl() | ++--------------------------------+ +| nexttoward() | ++--------------------------------+ +| nexttowardf() | ++--------------------------------+ +| nexttowardl() | ++--------------------------------+ +| pow() | ++--------------------------------+ +| powf() | ++--------------------------------+ +| powl() | ++--------------------------------+ +| remainder() | ++--------------------------------+ +| remainderf() | ++--------------------------------+ +| remainderl() | ++--------------------------------+ +| remquo() | ++--------------------------------+ +| remquof() | ++--------------------------------+ +| remquol() | ++--------------------------------+ +| rint() | ++--------------------------------+ +| rintf() | ++--------------------------------+ +| rintl() | ++--------------------------------+ +| round() | ++--------------------------------+ +| roundf() | ++--------------------------------+ +| roundl() | ++--------------------------------+ +| scalbln() | ++--------------------------------+ +| scalblnf() | ++--------------------------------+ +| scalblnl() | ++--------------------------------+ +| scalbn() | ++--------------------------------+ +| scalbnf() | ++--------------------------------+ +| scalbnl() | ++--------------------------------+ +| signbit() | ++--------------------------------+ +| sin() | ++--------------------------------+ +| sinf() | ++--------------------------------+ +| sinh() | ++--------------------------------+ +| sinhf() | ++--------------------------------+ +| sinhl() | ++--------------------------------+ +| sinl() | ++--------------------------------+ +| sqrt() | ++--------------------------------+ +| sqrtf() | ++--------------------------------+ +| sqrtl() | ++--------------------------------+ +| tan() | ++--------------------------------+ +| tanf() | ++--------------------------------+ +| tanh() | ++--------------------------------+ +| tanhf() | ++--------------------------------+ +| tanhl() | ++--------------------------------+ +| tanl() | ++--------------------------------+ +| tgamma() | ++--------------------------------+ +| tgammaf() | ++--------------------------------+ +| tgammal() | ++--------------------------------+ +| trunc() | ++--------------------------------+ +| truncf() | ++--------------------------------+ +| truncl() | ++--------------------------------+ + +.. [#fn11] NuttX supports different ``libm`` implementations with different + sets of supported functions. ``libm`` support in NuttX is controlled + by Kconfig choice option. + +POSIX_FD_MGMT +------------- + +File Descriptor Management: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`dup` | Yes | ++--------------------------------+---------+ +| :c:func:`dup2` | Yes | ++--------------------------------+---------+ +| :c:func:`dup3` | Yes | ++--------------------------------+---------+ +| :c:func:`fcntl` | Yes | ++--------------------------------+---------+ +| :c:func:`fgetpos` | Yes | ++--------------------------------+---------+ +| :c:func:`fseek` | Yes | ++--------------------------------+---------+ +| :c:func:`fseeko` | Yes | ++--------------------------------+---------+ +| :c:func:`fsetpos` | Yes | ++--------------------------------+---------+ +| :c:func:`ftell` | Yes | ++--------------------------------+---------+ +| :c:func:`ftello` | Yes | ++--------------------------------+---------+ +| :c:func:`ftruncate` | Yes | ++--------------------------------+---------+ +| :c:func:`lseek` | Yes | ++--------------------------------+---------+ +| :c:func:`rewind` | Yes | ++--------------------------------+---------+ + +POSIX_FILE_SYSTEM +----------------- + +File System: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`access` | Yes | ++--------------------------------+---------+ +| :c:func:`chdir` | Yes | ++--------------------------------+---------+ +| :c:func:`closedir` | Yes | ++--------------------------------+---------+ +| :c:func:`creat` | Yes | ++--------------------------------+---------+ +| :c:func:`fchdir` | Yes | ++--------------------------------+---------+ +| :c:func:`fpathconf` | Yes | ++--------------------------------+---------+ +| :c:func:`fstat` | Yes | ++--------------------------------+---------+ +| :c:func:`fstatvfs` | Yes | ++--------------------------------+---------+ +| :c:func:`futimens` | Yes | ++--------------------------------+---------+ +| :c:func:`getcwd` | Yes | ++--------------------------------+---------+ +| :c:func:`link` | Yes | ++--------------------------------+---------+ +| :c:func:`mkdir` | Yes | ++--------------------------------+---------+ +| :c:func:`mkostemp` | Yes | ++--------------------------------+---------+ +| :c:func:`mkstemp` | Yes | ++--------------------------------+---------+ +| :c:func:`opendir` | Yes | ++--------------------------------+---------+ +| :c:func:`pathconf` | Yes | ++--------------------------------+---------+ +| posix_getdents() | No | ++--------------------------------+---------+ +| :c:func:`readdir` | Yes | ++--------------------------------+---------+ +| :c:func:`remove` | Yes | ++--------------------------------+---------+ +| :c:func:`rename` | Yes | ++--------------------------------+---------+ +| :c:func:`rewinddir` | Yes | ++--------------------------------+---------+ +| :c:func:`rmdir` | Yes | ++--------------------------------+---------+ +| :c:func:`stat` | Yes | ++--------------------------------+---------+ +| :c:func:`statvfs` | Yes | ++--------------------------------+---------+ +| :c:func:`tmpfile` | Yes | ++--------------------------------+---------+ +| :c:func:`tmpnam` | Yes | ++--------------------------------+---------+ +| :c:func:`truncate` | Yes | ++--------------------------------+---------+ +| :c:func:`unlink` | Yes | ++--------------------------------+---------+ + +POSIX_MULTI_PROCESS +------------------- + +Multiple Processes: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`_Exit` | Yes | ++--------------------------------+---------+ +| _Fork() | No | ++--------------------------------+---------+ +| :c:func:`_exit` | Yes | ++--------------------------------+---------+ +| :c:func:`assert` | Yes | ++--------------------------------+---------+ +| :c:func:`at_quick_exit` | Yes | ++--------------------------------+---------+ +| :c:func:`atexit` | Yes | ++--------------------------------+---------+ +| :c:func:`clock` | Yes | ++--------------------------------+---------+ +| :c:func:`execl` | Yes | ++--------------------------------+---------+ +| :c:func:`execle` | Yes | ++--------------------------------+---------+ +| :c:func:`execlp` | Yes | ++--------------------------------+---------+ +| :c:func:`execv` | Yes | ++--------------------------------+---------+ +| :c:func:`execve` | Yes | ++--------------------------------+---------+ +| :c:func:`execvp` | Yes | ++--------------------------------+---------+ +| :c:func:`exit` | Yes | ++--------------------------------+---------+ +| fork() | No | ++--------------------------------+---------+ +| :c:func:`getpgrp` | Yes | ++--------------------------------+---------+ +| :c:func:`getpgid` | Yes | ++--------------------------------+---------+ +| :c:func:`getpid` | Yes | ++--------------------------------+---------+ +| :c:func:`getppid` | Yes | ++--------------------------------+---------+ +| :c:func:`getrlimit` | Yes | ++--------------------------------+---------+ +| getsid() | No | ++--------------------------------+---------+ +| :c:func:`quick_exit` | Yes | ++--------------------------------+---------+ +| :c:func:`setrlimit` | Yes | ++--------------------------------+---------+ +| setsid() | No | ++--------------------------------+---------+ +| :c:func:`sleep` | Yes | ++--------------------------------+---------+ +| :c:func:`times` | Yes | ++--------------------------------+---------+ +| :c:func:`wait` | Yes | ++--------------------------------+---------+ +| :c:func:`waitid` | Yes | ++--------------------------------+---------+ +| :c:func:`waitpid` | Yes | ++--------------------------------+---------+ + +POSIX_NETWORKING +---------------- + +Networking: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`accept` | Yes | ++--------------------------------+---------+ +| :c:func:`accept4` | Yes | ++--------------------------------+---------+ +| :c:func:`be16toh` | Yes | ++--------------------------------+---------+ +| :c:func:`be32toh` | Yes | ++--------------------------------+---------+ +| :c:func:`be64toh` | Yes | ++--------------------------------+---------+ +| :c:func:`bind` | Yes | ++--------------------------------+---------+ +| :c:func:`connect` | Yes | ++--------------------------------+---------+ +| :c:func:`endhostent` | Yes | ++--------------------------------+---------+ +| :c:func:`endnetent` | Yes | ++--------------------------------+---------+ +| :c:func:`endprotoent` | Yes | ++--------------------------------+---------+ +| :c:func:`endservent` | Yes | ++--------------------------------+---------+ +| :c:func:`freeaddrinfo` | Yes | ++--------------------------------+---------+ +| :c:func:`gai_strerror` | Yes | ++--------------------------------+---------+ +| :c:func:`getaddrinfo` | Yes | ++--------------------------------+---------+ +| :c:func:`gethostent` | Yes | ++--------------------------------+---------+ +| :c:func:`gethostname` | Yes | ++--------------------------------+---------+ +| :c:func:`getnameinfo` | Yes | ++--------------------------------+---------+ +| :c:func:`getnetbyaddr` | Yes | ++--------------------------------+---------+ +| :c:func:`getnetbyname` | Yes | ++--------------------------------+---------+ +| :c:func:`getnetent` | Yes | ++--------------------------------+---------+ +| :c:func:`getpeername` | Yes | ++--------------------------------+---------+ +| :c:func:`getprotobyname` | Yes | ++--------------------------------+---------+ +| :c:func:`getprotobynumber` | Yes | ++--------------------------------+---------+ +| :c:func:`getprotoent` | Yes | ++--------------------------------+---------+ +| :c:func:`getservbyname` | Yes | ++--------------------------------+---------+ +| :c:func:`getservbyport` | Yes | ++--------------------------------+---------+ +| :c:func:`getservent` | Yes | ++--------------------------------+---------+ +| :c:func:`getsockname` | Yes | ++--------------------------------+---------+ +| :c:func:`getsockopt` | Yes | ++--------------------------------+---------+ +| :c:func:`htobe16` | Yes | ++--------------------------------+---------+ +| :c:func:`htobe32` | Yes | ++--------------------------------+---------+ +| :c:func:`htobe64` | Yes | ++--------------------------------+---------+ +| :c:func:`htole16` | Yes | ++--------------------------------+---------+ +| :c:func:`htole32` | Yes | ++--------------------------------+---------+ +| :c:func:`htole64` | Yes | ++--------------------------------+---------+ +| :c:func:`htonl` | Yes | ++--------------------------------+---------+ +| :c:func:`htons` | Yes | ++--------------------------------+---------+ +| :c:func:`if_freenameindex` | Yes | ++--------------------------------+---------+ +| :c:func:`if_indextoname` | Yes | ++--------------------------------+---------+ +| :c:func:`if_nameindex` | Yes | ++--------------------------------+---------+ +| :c:func:`if_nametoindex` | Yes | ++--------------------------------+---------+ +| :c:func:`inet_addr` | Yes | ++--------------------------------+---------+ +| :c:func:`inet_ntoa` | Yes | ++--------------------------------+---------+ +| :c:func:`inet_ntop` | Yes | ++--------------------------------+---------+ +| :c:func:`inet_pton` | Yes | ++--------------------------------+---------+ +| :c:func:`le16toh` | Yes | ++--------------------------------+---------+ +| :c:func:`le32toh` | Yes | ++--------------------------------+---------+ +| :c:func:`le64toh` | Yes | ++--------------------------------+---------+ +| :c:func:`listen` | Yes | ++--------------------------------+---------+ +| :c:func:`ntohl` | Yes | ++--------------------------------+---------+ +| :c:func:`ntohs` | Yes | ++--------------------------------+---------+ +| :c:func:`recv` | Yes | ++--------------------------------+---------+ +| :c:func:`recvfrom` | Yes | ++--------------------------------+---------+ +| :c:func:`recvmsg` | Yes | ++--------------------------------+---------+ +| :c:func:`send` | Yes | ++--------------------------------+---------+ +| :c:func:`sendmsg` | Yes | ++--------------------------------+---------+ +| :c:func:`sendto` | Yes | ++--------------------------------+---------+ +| :c:func:`sethostent` | Yes | ++--------------------------------+---------+ +| :c:func:`setnetent` | Yes | ++--------------------------------+---------+ +| :c:func:`setprotoent` | Yes | ++--------------------------------+---------+ +| :c:func:`setservent` | Yes | ++--------------------------------+---------+ +| :c:func:`setsockopt` | Yes | ++--------------------------------+---------+ +| :c:func:`shutdown` | Yes | ++--------------------------------+---------+ +| :c:func:`socket` | Yes | ++--------------------------------+---------+ +| :c:func:`sockatmark` | Yes | ++--------------------------------+---------+ +| :c:func:`socketpair` | Yes | ++--------------------------------+---------+ + +POSIX_PIPE +---------- + +Pipe: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`pipe` | Yes | ++--------------------------------+---------+ +| :c:func:`pipe2` | Yes | ++--------------------------------+---------+ + +POSIX_SIGNAL_JUMP +----------------- + +Signal Jump Functions: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| siglongjmp() | No | ++--------------------------------+---------+ +| sigsetjmp() | No | ++--------------------------------+---------+ + +POSIX_C_LANG_WIDE_CHAR +---------------------- + +Wide-Character ISO C Library: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| btowc() | Yes | ++--------------------------------+---------+ +| iswalnum() | Yes | ++--------------------------------+---------+ +| iswalpha() | Yes | ++--------------------------------+---------+ +| iswblank() | Yes | ++--------------------------------+---------+ +| iswcntrl() | Yes | ++--------------------------------+---------+ +| iswctype() | Yes | ++--------------------------------+---------+ +| iswdigit() | Yes | ++--------------------------------+---------+ +| iswgraph() | Yes | ++--------------------------------+---------+ +| iswlower() | Yes | ++--------------------------------+---------+ +| iswprint() | Yes | ++--------------------------------+---------+ +| iswpunct() | Yes | ++--------------------------------+---------+ +| iswspace() | Yes | ++--------------------------------+---------+ +| iswupper() | Yes | ++--------------------------------+---------+ +| iswxdigit() | Yes | ++--------------------------------+---------+ +| mblen() | Yes | ++--------------------------------+---------+ +| mbrlen() | Yes | ++--------------------------------+---------+ +| mbrtowc() | Yes | ++--------------------------------+---------+ +| mbsinit() | Yes | ++--------------------------------+---------+ +| mbsrtowcs() | Yes | ++--------------------------------+---------+ +| mbstowcs() | Yes | ++--------------------------------+---------+ +| mbtowc() | Yes | ++--------------------------------+---------+ +| swprintf() | Yes | ++--------------------------------+---------+ +| swscanf() | Yes | ++--------------------------------+---------+ +| towctrans() | Yes | ++--------------------------------+---------+ +| towlower() | Yes | ++--------------------------------+---------+ +| towupper() | Yes | ++--------------------------------+---------+ +| vswprintf() | Yes | ++--------------------------------+---------+ +| vswscanf() | Yes | ++--------------------------------+---------+ +| wcrtomb() | Yes | ++--------------------------------+---------+ +| wcscat() | Yes | ++--------------------------------+---------+ +| wcschr() | Yes | ++--------------------------------+---------+ +| wcscmp() | Yes | ++--------------------------------+---------+ +| wcscoll() | Yes | ++--------------------------------+---------+ +| wcscpy() | Yes | ++--------------------------------+---------+ +| wcscspn() | Yes | ++--------------------------------+---------+ +| wcsftime() | Yes | ++--------------------------------+---------+ +| wcslen() | Yes | ++--------------------------------+---------+ +| wcsncat() | Yes | ++--------------------------------+---------+ +| wcsncmp() | Yes | ++--------------------------------+---------+ +| wcsncpy() | Yes | ++--------------------------------+---------+ +| wcspbrk() | Yes | ++--------------------------------+---------+ +| wcsrchr() | Yes | ++--------------------------------+---------+ +| wcsrtombs() | Yes | ++--------------------------------+---------+ +| wcsspn() | Yes | ++--------------------------------+---------+ +| wcsstr() | Yes | ++--------------------------------+---------+ +| wcstod() | Yes | ++--------------------------------+---------+ +| wcstof() | Yes | ++--------------------------------+---------+ +| wcstoimax() | Yes | ++--------------------------------+---------+ +| wcstok() | Yes | ++--------------------------------+---------+ +| wcstol() | Yes | ++--------------------------------+---------+ +| wcstold() | Yes | ++--------------------------------+---------+ +| wcstoll() | Yes | ++--------------------------------+---------+ +| wcstombs() | Yes | ++--------------------------------+---------+ +| wcstoul() | Yes | ++--------------------------------+---------+ +| wcstoull() | Yes | ++--------------------------------+---------+ +| wcstoumax() | Yes | ++--------------------------------+---------+ +| wcsxfrm() | Yes | ++--------------------------------+---------+ +| wctob() | Yes | ++--------------------------------+---------+ +| wctomb() | Yes | ++--------------------------------+---------+ +| wctrans() | Yes | ++--------------------------------+---------+ +| wctype() | Yes | ++--------------------------------+---------+ +| wmemchr() | Yes | ++--------------------------------+---------+ +| wmemcmp() | Yes | ++--------------------------------+---------+ +| wmemcpy() | Yes | ++--------------------------------+---------+ +| wmemmove() | Yes | ++--------------------------------+---------+ +| wmemset() | Yes | ++--------------------------------+---------+ + +POSIX_DEVICE_SPECIFIC +--------------------- + +General Terminal: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`cfgetispeed` | Yes | ++--------------------------------+---------+ +| :c:func:`cfgetospeed` | Yes | ++--------------------------------+---------+ +| :c:func:`cfsetispeed` | Yes | ++--------------------------------+---------+ +| :c:func:`cfsetospeed` | Yes | ++--------------------------------+---------+ +| ctermid() | No | ++--------------------------------+---------+ +| :c:func:`isatty` | Yes | ++--------------------------------+---------+ +| :c:func:`tcdrain` | Yes | ++--------------------------------+---------+ +| :c:func:`tcflow` | Yes | ++--------------------------------+---------+ +| :c:func:`tcflush` | Yes | ++--------------------------------+---------+ +| :c:func:`tcgetattr` | Yes | ++--------------------------------+---------+ +| tcgetwinsize() | No | ++--------------------------------+---------+ +| :c:func:`tcsendbreak` | Yes | ++--------------------------------+---------+ +| :c:func:`tcsetattr` | Yes | ++--------------------------------+---------+ +| tcsetwinsize() | No | ++--------------------------------+---------+ +| :c:func:`ttyname` | Yes | ++--------------------------------+---------+ + +POSIX_FIFO +---------- + +FIFO: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`mkfifo` | Yes | ++--------------------------------+---------+ + +POSIX_FILE_ATTRIBUTES +--------------------- + +File Attributes: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`chmod` | Yes | ++--------------------------------+---------+ +| :c:func:`chown` | Yes | ++--------------------------------+---------+ +| :c:func:`fchmod` | Yes | ++--------------------------------+---------+ +| :c:func:`fchown` | Yes | ++--------------------------------+---------+ +| :c:func:`umask` | Yes | ++--------------------------------+---------+ + +POSIX_FILE_SYSTEM_EXT +--------------------- + +File System Extensions: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`alphasort` | Yes | ++--------------------------------+---------+ +| :c:func:`dirfd` | Yes | ++--------------------------------+---------+ +| :c:func:`getdelim` | Yes | ++--------------------------------+---------+ +| :c:func:`getline` | Yes | ++--------------------------------+---------+ +| :c:func:`mkdtemp` | Yes | ++--------------------------------+---------+ +| :c:func:`scandir` | Yes | ++--------------------------------+---------+ + +POSIX_JOB_CONTROL +----------------- + +Job Control: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| setpgid() | No | ++--------------------------------+---------+ +| tcgetpgrp() | No | ++--------------------------------+---------+ +| tcsetpgrp() | No | ++--------------------------------+---------+ +| :c:func:`tcgetsid` | Yes | ++--------------------------------+---------+ + +POSIX_REGEXP +------------ + +Regular Expressions: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`regcomp` | Yes | ++--------------------------------+---------+ +| :c:func:`regerror` | Yes | ++--------------------------------+---------+ +| :c:func:`regexec` | Yes | ++--------------------------------+---------+ +| :c:func:`regfree` | Yes | ++--------------------------------+---------+ + +POSIX_SHELL_FUNC +---------------- + +Shell and Utilities: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`pclose` | Yes | ++--------------------------------+---------+ +| :c:func:`popen` | Yes | ++--------------------------------+---------+ +| :c:func:`system` | Yes | ++--------------------------------+---------+ +| wordexp() | No | ++--------------------------------+---------+ +| wordfree() | No | ++--------------------------------+---------+ + +POSIX_STRING_MATCHING +--------------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`fnmatch` | Yes | ++--------------------------------+---------+ +| :c:func:`getopt` | Yes | ++--------------------------------+---------+ +| optarg | Yes | ++--------------------------------+---------+ +| optind | Yes | ++--------------------------------+---------+ +| opterr | Yes | ++--------------------------------+---------+ +| optopt | Yes | ++--------------------------------+---------+ + +POSIX_SYMBOLIC_LINKS +-------------------- + +Symbolic Links: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`lchown` | Yes | ++--------------------------------+---------+ +| :c:func:`lstat` | Yes | ++--------------------------------+---------+ +| :c:func:`readlink` | Yes | ++--------------------------------+---------+ +| :c:func:`realpath` | Yes | ++--------------------------------+---------+ +| :c:func:`symlink` | Yes | ++--------------------------------+---------+ + +POSIX_SYSTEM_DATABASE +--------------------- + +System Database: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`getgrgid` | Yes | ++--------------------------------+---------+ +| :c:func:`getgrnam` | Yes | ++--------------------------------+---------+ +| :c:func:`getpwnam` | Yes | ++--------------------------------+---------+ +| :c:func:`getpwuid` | Yes | ++--------------------------------+---------+ + +POSIX_USER_GROUPS +----------------- + +User and Group: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`getegid` | Yes | ++--------------------------------+---------+ +| :c:func:`geteuid` | Yes | ++--------------------------------+---------+ +| :c:func:`getgid` | Yes | ++--------------------------------+---------+ +| getgroups() | No | ++--------------------------------+---------+ +| getlogin() | No | ++--------------------------------+---------+ +| :c:func:`getuid` | Yes | ++--------------------------------+---------+ +| :c:func:`setegid` | Yes | ++--------------------------------+---------+ +| :c:func:`seteuid` | Yes | ++--------------------------------+---------+ +| :c:func:`setgid` | Yes | ++--------------------------------+---------+ +| :c:func:`setuid` | Yes | ++--------------------------------+---------+ + +POSIX_WIDE_CHAR_DEVICE_IO +------------------------- + +Device Input and Output: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`fgetwc` | Yes | ++--------------------------------+---------+ +| :c:func:`fgetws` | Yes | ++--------------------------------+---------+ +| :c:func:`fputwc` | Yes | ++--------------------------------+---------+ +| :c:func:`fputws` | Yes | ++--------------------------------+---------+ +| :c:func:`fwide` | Yes | ++--------------------------------+---------+ +| :c:func:`fwprintf` | Yes | ++--------------------------------+---------+ +| :c:func:`fwscanf` | Yes | ++--------------------------------+---------+ +| :c:func:`getwc` | Yes | ++--------------------------------+---------+ +| :c:func:`getwchar` | Yes | ++--------------------------------+---------+ +| open_wmemstream() | No | ++--------------------------------+---------+ +| :c:func:`putwc` | Yes | ++--------------------------------+---------+ +| :c:func:`putwchar` | Yes | ++--------------------------------+---------+ +| :c:func:`ungetwc` | Yes | ++--------------------------------+---------+ +| :c:func:`vfwprintf` | Yes | ++--------------------------------+---------+ +| :c:func:`vfwscanf` | Yes | ++--------------------------------+---------+ +| :c:func:`vwprintf` | Yes | ++--------------------------------+---------+ +| :c:func:`vwscanf` | Yes | ++--------------------------------+---------+ +| :c:func:`wprintf` | Yes | ++--------------------------------+---------+ +| :c:func:`wscanf` | Yes | ++--------------------------------+---------+ + +XSI_C_LANG_SUPPORT +------------------ + +XSI General C Library: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| a64l() | No | ++--------------------------------+---------+ +| daylight | No | ++--------------------------------+---------+ +| :c:func:`drand48` | Yes | ++--------------------------------+---------+ +| :c:func:`erand48` | Yes | ++--------------------------------+---------+ +| :c:func:`ffs` | Yes | ++--------------------------------+---------+ +| :c:func:`ffsl` | Yes | ++--------------------------------+---------+ +| :c:func:`ffsll` | Yes | ++--------------------------------+---------+ +| getdate() | No | ++--------------------------------+---------+ +| :c:func:`hcreate` | Yes | ++--------------------------------+---------+ +| :c:func:`hdestroy` | Yes | ++--------------------------------+---------+ +| :c:func:`hsearch` | Yes | ++--------------------------------+---------+ +| initstate() | No | ++--------------------------------+---------+ +| insque() | No | ++--------------------------------+---------+ +| :c:func:`jrand48` | Yes | ++--------------------------------+---------+ +| l64a() | No | ++--------------------------------+---------+ +| :c:func:`lcong48` | Yes | ++--------------------------------+---------+ +| lfind() | No | ++--------------------------------+---------+ +| :c:func:`lrand48` | Yes | ++--------------------------------+---------+ +| lsearch() | No | ++--------------------------------+---------+ +| :c:func:`memccpy` | Yes | ++--------------------------------+---------+ +| :c:func:`mrand48` | Yes | ++--------------------------------+---------+ +| :c:func:`nrand48` | Yes | ++--------------------------------+---------+ +| :c:func:`random` | Yes | ++--------------------------------+---------+ +| remque() | No | ++--------------------------------+---------+ +| :c:func:`seed48` | Yes | ++--------------------------------+---------+ +| setstate() | No | ++--------------------------------+---------+ +| signgam | No | ++--------------------------------+---------+ +| :c:func:`srand48` | Yes | ++--------------------------------+---------+ +| :c:func:`srandom` | Yes | ++--------------------------------+---------+ +| :c:func:`strptime` | Yes | ++--------------------------------+---------+ +| :c:func:`swab` | Yes | ++--------------------------------+---------+ +| tdelete() | No | ++--------------------------------+---------+ +| tfind() | No | ++--------------------------------+---------+ +| timezone | No | ++--------------------------------+---------+ +| tsearch() | No | ++--------------------------------+---------+ +| twalk() | No | ++--------------------------------+---------+ + +XSI_DBM +------- + +XSI Database Management: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| dbm_clearerr() | No | ++--------------------------------+---------+ +| dbm_close() | No | ++--------------------------------+---------+ +| dbm_delete() | No | ++--------------------------------+---------+ +| dbm_error() | No | ++--------------------------------+---------+ +| dbm_fetch() | No | ++--------------------------------+---------+ +| dbm_firstkey() | No | ++--------------------------------+---------+ +| dbm_nextkey() | No | ++--------------------------------+---------+ +| dbm_open() | No | ++--------------------------------+---------+ +| dbm_store() | No | ++--------------------------------+---------+ + +XSI_DEVICE_IO +------------- + +XSI Device Input and Output: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`fmtmsg` | Yes | ++--------------------------------+---------+ +| :c:func:`readv` | Yes | ++--------------------------------+---------+ +| :c:func:`writev` | Yes | ++--------------------------------+---------+ + +XSI_DEVICE_SPECIFIC +------------------- + +XSI General Terminal: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`grantpt` | Yes | ++--------------------------------+---------+ +| :c:func:`posix_openpt` | Yes | ++--------------------------------+---------+ +| :c:func:`ptsname` | Yes | ++--------------------------------+---------+ +| :c:func:`unlockpt` | Yes | ++--------------------------------+---------+ + +XSI_DYNAMIC_LINKING +------------------- + +Dynamic Linking: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`dladdr` | Yes | ++--------------------------------+---------+ +| :c:func:`dlclose` | Yes | ++--------------------------------+---------+ +| :c:func:`dlerror` | Yes | ++--------------------------------+---------+ +| :c:func:`dlopen` | Yes | ++--------------------------------+---------+ +| :c:func:`dlsym` | Yes | ++--------------------------------+---------+ + +XSI_FD_MGMT +----------- + +XSI File Descriptor Management: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`truncate` | Yes | ++--------------------------------+---------+ + +XSI_FILE_SYSTEM +--------------- + +XSI File System: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`basename` | Yes | ++--------------------------------+---------+ +| :c:func:`dirname` | Yes | ++--------------------------------+---------+ +| :c:func:`lockf` | Yes | ++--------------------------------+---------+ +| :c:func:`mknod` | Yes | ++--------------------------------+---------+ +| :c:func:`nftw` | Yes | ++--------------------------------+---------+ +| :c:func:`seekdir` | Yes | ++--------------------------------+---------+ +| :c:func:`sync` | Yes | ++--------------------------------+---------+ +| :c:func:`telldir` | Yes | ++--------------------------------+---------+ +| :c:func:`utimes` | Yes | ++--------------------------------+---------+ + +XSI_I18N +-------- + +XSI Internationalization: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`catclose` | Yes | ++--------------------------------+---------+ +| :c:func:`catgets` | Yes | ++--------------------------------+---------+ +| :c:func:`catopen` | Yes | ++--------------------------------+---------+ +| :c:func:`nl_langinfo` | Yes | ++--------------------------------+---------+ + +XSI_IPC +------- + +XSI Interprocess Communication: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`ftok` | Yes | ++--------------------------------+---------+ +| :c:func:`msgctl` | Yes | ++--------------------------------+---------+ +| :c:func:`msgget` | Yes | ++--------------------------------+---------+ +| :c:func:`msgrcv` | Yes | ++--------------------------------+---------+ +| :c:func:`msgsnd` | Yes | ++--------------------------------+---------+ +| :c:func:`semctl` | No | ++--------------------------------+---------+ +| :c:func:`semget` | No | ++--------------------------------+---------+ +| :c:func:`semop` | No | ++--------------------------------+---------+ +| :c:func:`shmat` | Yes | ++--------------------------------+---------+ +| :c:func:`shmctl` | Yes | ++--------------------------------+---------+ +| :c:func:`shmdt` | Yes | ++--------------------------------+---------+ +| :c:func:`shmget` | Yes | ++--------------------------------+---------+ + +XSI_JOB_CONTROL +--------------- + +XSI Job Control: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`tcgetsid` | Yes | ++--------------------------------+---------+ + +XSI_JUMP +-------- + +XSI Jump Functions: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`_longjmp` | Yes | ++--------------------------------+---------+ +| :c:func:`_setjmp` | Yes | ++--------------------------------+---------+ + +XSI_MATH +-------- + +Depends on the enabled ``libm`` implementation [#fn12]_. + +XSI Maths Library: + ++--------------------------------+ +| API | ++================================+ +| j0() | ++--------------------------------+ +| j1() | ++--------------------------------+ +| jn() | ++--------------------------------+ +| scalb() | ++--------------------------------+ +| y0() | ++--------------------------------+ +| y1() | ++--------------------------------+ +| yn() | ++--------------------------------+ + +.. [#fn12] NuttX supports different ``libm`` implementations with different + sets of supported functions. ``libm`` support in NuttX is controlled + by Kconfig choice option. + +XSI_MULTI_PROCESS +----------------- + +XSI Multiple Process: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`getpgid` | Yes | ++--------------------------------+---------+ +| :c:func:`getpriority` | Yes | ++--------------------------------+---------+ +| :c:func:`getrlimit` | Yes | ++--------------------------------+---------+ +| :c:func:`getrusage` | Yes | ++--------------------------------+---------+ +| getsid() | No | ++--------------------------------+---------+ +| :c:func:`nice` | Yes | ++--------------------------------+---------+ +| setpgrp() | No | ++--------------------------------+---------+ +| :c:func:`setpriority` | Yes | ++--------------------------------+---------+ +| :c:func:`setrlimit` | Yes | ++--------------------------------+---------+ +| ulimit() | No | ++--------------------------------+---------+ +| :c:func:`usleep` | Yes | ++--------------------------------+---------+ +| :c:func:`vfork` | Yes | ++--------------------------------+---------+ +| :c:func:`waitid` | Yes | ++--------------------------------+---------+ + +XSI_SIGNALS +----------- + +XSI Signal: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| bsd_signal() | No | ++--------------------------------+---------+ +| :c:func:`killpg` | Yes | ++--------------------------------+---------+ +| :c:func:`sigaltstack` | Yes | ++--------------------------------+---------+ +| :c:func:`sighold` | Yes | ++--------------------------------+---------+ +| :c:func:`sigignore` | Yes | ++--------------------------------+---------+ +| :c:func:`siginterrupt` | Yes | ++--------------------------------+---------+ +| :c:func:`sigpause` | Yes | ++--------------------------------+---------+ +| :c:func:`sigrelse` | Yes | ++--------------------------------+---------+ +| :c:func:`sigset` | Yes | ++--------------------------------+---------+ +| ualarm() | No | ++--------------------------------+---------+ + +XSI_SINGLE_PROCESS +------------------ + +XSI Single Process: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| gethostid() | No | ++--------------------------------+---------+ +| :c:func:`gettimeofday` | Yes | ++--------------------------------+---------+ +| :c:func:`putenv` | Yes | ++--------------------------------+---------+ + +XSI_SYSTEM_DATABASE +------------------- + +XSI System Database: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`endpwent` | Yes | ++--------------------------------+---------+ +| :c:func:`getpwent` | Yes | ++--------------------------------+---------+ +| :c:func:`setpwent` | Yes | ++--------------------------------+---------+ + +XSI_SYSTEM_LOGGING +------------------ + +XSI System Logging: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`closelog` | No | ++--------------------------------+---------+ +| :c:func:`openlog` | No | ++--------------------------------+---------+ +| :c:func:`setlogmask` | Yes | ++--------------------------------+---------+ +| :c:func:`syslog` | Yes | ++--------------------------------+---------+ + +XSI_THREADS_EXT +--------------- + +XSI Threads Extensions: + ++---------------------------------+---------+ +| API | Support | ++=================================+=========+ +| :c:func:`pthread_attr_getstack` | Yes | ++---------------------------------+---------+ +| :c:func:`pthread_attr_setstack` | Yes | ++---------------------------------+---------+ +| pthread_getconcurrency() | No | ++---------------------------------+---------+ +| pthread_setconcurrency() | No | ++---------------------------------+---------+ + +XSI_TIMERS +---------- + +XSI Timers: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`getitimer` | Yes | ++--------------------------------+---------+ +| :c:func:`setitimer` | Yes | ++--------------------------------+---------+ + +XSI_USER_GROUPS +--------------- + +XSI User and Group: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| endgrent() | No | ++--------------------------------+---------+ +| endutxent() | No | ++--------------------------------+---------+ +| getgrent() | No | ++--------------------------------+---------+ +| getutxent() | No | ++--------------------------------+---------+ +| getutxid() | No | ++--------------------------------+---------+ +| getutxline() | No | ++--------------------------------+---------+ +| pututxline() | No | ++--------------------------------+---------+ +| setgrent() | No | ++--------------------------------+---------+ +| :c:func:`setregid` | Yes | ++--------------------------------+---------+ +| :c:func:`setreuid` | Yes | ++--------------------------------+---------+ +| setutxent() | No | ++--------------------------------+---------+ + + +XSI_WIDE_CHAR +------------- + +XSI Wide-Character Library: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`wcswidth` | Yes | ++--------------------------------+---------+ +| :c:func:`wcwidth` | Yes | ++--------------------------------+---------+ + +POSIX.1 Option Requirements +=========================== + +_POSIX_CLOCK_SELECTION +---------------------- + +Clock Selection: + ++-------------------------------------+---------+ +| API | Support | ++=====================================+=========+ +| :c:func:`clock_nanosleep` | Yes | ++-------------------------------------+---------+ +| :c:func:`pthread_condattr_getclock` | Yes | ++-------------------------------------+---------+ +| :c:func:`pthread_condattr_setclock` | Yes | ++-------------------------------------+---------+ + +_POSIX_FSYNC +------------ + +File Synchronization: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`fsync` [#fn13]_ | Yes | ++--------------------------------+---------+ + +.. [#fn13] Revisit: why ``#undef _POSIX_FSYNC`` in ``unistd.h`` ? + +_POSIX_IPV6 +----------- + +No functions under this option. + +_POSIX_MEMLOCK +-------------- + ++--------------------------------+----------------+ +| API | Support | ++================================+================+ +| :c:func:`mlockall` | Dummy [#fn14]_ | ++--------------------------------+----------------+ +| :c:func:`munlockall` | Dummy [#fn14]_ | ++--------------------------------+----------------+ + +.. [#fn14] The function returns a success value but doesn't implement + the requred functionality. + +_POSIX_MEMLOCK_RANGE +-------------------- + ++--------------------------------+----------------+ +| API | Support | ++================================+================+ +| :c:func:`mlock` | Dummy [#fn15]_ | ++--------------------------------+----------------+ +| :c:func:`munlock` | Dummy [#fn15]_ | ++--------------------------------+----------------+ + +.. [#fn15] The function returns a success value but doesn't implement + the requred functionality. + +_POSIX_MONOTONIC_CLOCK +---------------------- + +No functions under this option. + +_POSIX_NO_TRUNC +--------------- + +No functions under this option. + +_POSIX_REALTIME_SIGNALS +----------------------- + +Realtime Signals: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`sigqueue` | Yes | ++--------------------------------+---------+ +| :c:func:`sigtimedwait` | Yes | ++--------------------------------+---------+ +| :c:func:`sigwaitinfo` | Yes | ++--------------------------------+---------+ + +_POSIX_SEMAPHORES +----------------- + +Semaphores: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`sem_clockwait` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_close` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_destroy` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_getvalue` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_init` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_open` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_post` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_timedwait` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_trywait` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_unlink` | Yes | ++--------------------------------+---------+ +| :c:func:`sem_wait` | Yes | ++--------------------------------+---------+ + +_POSIX_SHARED_MEMORY_OBJECTS +---------------------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`mmap` | Yes | ++--------------------------------+---------+ +| :c:func:`munmap` | Yes | ++--------------------------------+---------+ +| :c:func:`shm_open` | Yes | ++--------------------------------+---------+ +| shm_unling() | No | ++--------------------------------+---------+ + +_POSIX_SYNCHRONIZED_IO +---------------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`fdatasync` | Yes | ++--------------------------------+---------+ +| :c:func:`fsync` | Yes | ++--------------------------------+---------+ +| :c:func:`msync` | Yes | ++--------------------------------+---------+ + +_POSIX_THREAD_ATTR_STACKADDR +---------------------------- + ++---------------------------------------+---------+ +| API | Support | ++=======================================+=========+ +| :c:func:`pthread_attr_getstackaddr` | Yes | ++---------------------------------------+---------+ +| :c:func:`pthread_attr_setstackaddr` | Yes | ++---------------------------------------+---------+ + +_POSIX_THREAD_ATTR_STACKSIZE +---------------------------- + ++---------------------------------------+---------+ +| API | Support | ++=======================================+=========+ +| :c:func:`pthread_attr_getstacksize` | Yes | ++---------------------------------------+---------+ +| :c:func:`pthread_attr_setstacksize` | Yes | ++---------------------------------------+---------+ + +_POSIX_THREAD_CPUTIME +--------------------- + ++-----------------------------------+---------+ +| API | Support | ++===================================+=========+ +| CLOCK_THREAD_CPUTIME_ID | Yes | ++-----------------------------------+---------+ +| :c:func:`pthread_getcpuclockid` | Yes | ++-----------------------------------+---------+ + +_POSIX_THREAD_PRIO_INHERIT +-------------------------- + ++-----------------------------------------+---------+ +| API | Support | ++=========================================+=========+ +| :c:func:`pthread_mutexattr_getprotocol` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_mutexattr_setprotocol` | Yes | ++-----------------------------------------+---------+ + +_POSIX_THREAD_PRIO_PROTECT +-------------------------- + ++-----------------------------------------------+---------+ +| API | Support | ++===============================================+=========+ +| :c:func:`pthread_mutex_getprioceiling` | Yes | ++-----------------------------------------------+---------+ +| :c:func:`pthread_mutex_setprioceiling` | Yes | ++-----------------------------------------------+---------+ +| :c:func:`pthread_mutexattr_getprioceiling` | Yes | ++-----------------------------------------------+---------+ +| :c:func:`pthread_mutexattr_getprotocol` | Yes | ++-----------------------------------------------+---------+ +| :c:func:`pthread_mutexattr_setprioceiling` | Yes | ++-----------------------------------------------+---------+ +| :c:func:`pthread_mutexattr_setprotocol` | Yes | ++-----------------------------------------------+---------+ + +_POSIX_THREAD_PRIORITY_SCHEDULING +--------------------------------- + ++-----------------------------------------+---------+ +| API | Support | ++=========================================+=========+ +| :c:func:`pthread_attr_getinheritsched` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_getschedpolicy` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_getscope` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_setinheritsched` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_setschedpolicy` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_attr_setscope` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_getschedparam` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_setschedparam` | Yes | ++-----------------------------------------+---------+ +| :c:func:`pthread_setschedprio` | Yes | ++-----------------------------------------+---------+ + +_POSIX_THREAD_SPORADIC_SERVER +----------------------------- + +No functions under this option. + +_POSIX_TIMEOUTS +--------------- + ++-------------------------------------------+---------+ +| API | Support | ++===========================================+=========+ +| :c:func:`mq_timedreceive` | Yes | ++-------------------------------------------+---------+ +| :c:func:`mq_timedsend` | Yes | ++-------------------------------------------+---------+ +| :c:func:`pthread_mutex_timedlock` | Yes | ++-------------------------------------------+---------+ +| :c:func:`pthread_rwlock_timedrdlock` | Yes | ++-------------------------------------------+---------+ +| :c:func:`pthread_rwlock_timedwrlock` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sem_timedwait` | Yes | ++-------------------------------------------+---------+ +| posix_trace_timedgetnext_event() [#fn16]_ | No | ++-------------------------------------------+---------+ + +.. [#fn16] ``_POSIX_TRACE*`` are obsolete. + +_POSIX_TIMERS +------------- + +Depends on ``!CONFIG_DISABLE_POSIX_TIMERS`` + +Timers: + ++---------------------------------+---------+ +| API | Support | ++=================================+=========+ +| :c:func:`clock_getres` | Yes | ++---------------------------------+---------+ +| :c:func:`clock_gettime` | Yes | ++---------------------------------+---------+ +| :c:func:`clock_settime` | Yes | ++---------------------------------+---------+ +| :c:func:`nanosleep` | Yes | ++---------------------------------+---------+ +| :c:func:`timer_create` | Yes | ++---------------------------------+---------+ +| :c:func:`timer_delete` | Yes | ++---------------------------------+---------+ +| :c:func:`timer_getoverrun` | Yes | ++---------------------------------+---------+ +| :c:func:`timer_gettime` | Yes | ++---------------------------------+---------+ +| :c:func:`timer_settime` | Yes | ++---------------------------------+---------+ + +_POSIX_MAPPED_FILES +------------------- + +Memory Mapped Files: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`mmap` | Yes | ++--------------------------------+---------+ +| :c:func:`munmap` | Yes | ++--------------------------------+---------+ + +_POSIX_MESSAGE_PASSING +---------------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`mq_close` | Yes | ++--------------------------------+---------+ +| :c:func:`mq_getattr` | Yes | ++--------------------------------+---------+ +| :c:func:`mq_notify` | Yes | ++--------------------------------+---------+ +| :c:func:`mq_open` | Yes | ++--------------------------------+---------+ +| :c:func:`mq_receive` | Yes | ++--------------------------------+---------+ +| :c:func:`mq_send` | Yes | ++--------------------------------+---------+ +| :c:func:`mq_setattr` | Yes | ++--------------------------------+---------+ +| :c:func:`mq_unlink` | Yes | ++--------------------------------+---------+ + +_POSIX_ASYNCHRONOUS_IO +---------------------- + +Depends on ``CONFIG_FS_AIO``. + +Asynchronous Input and Output Functions: + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`aio_cancel` | Yes | ++--------------------------------+---------+ +| :c:func:`aio_error` | Yes | ++--------------------------------+---------+ +| :c:func:`aio_fsync` | Yes | ++--------------------------------+---------+ +| :c:func:`aio_read` | Yes | ++--------------------------------+---------+ +| :c:func:`aio_return` | Yes | ++--------------------------------+---------+ +| :c:func:`aio_suspend` | Yes | ++--------------------------------+---------+ +| :c:func:`aio_write` | Yes | ++--------------------------------+---------+ +| :c:func:`lio_listio` | Yes | ++--------------------------------+---------+ + +_POSIX_BARRIERS +--------------- + ++--------------------------------------------+---------+ +| API | Support | ++============================================+=========+ +| :c:func:`pthread_barrier_destroy` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrier_init` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrier_wait` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_destroy` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_init` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_getpshared` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_setpshared` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_getpshared` | Yes | ++--------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_setpshared` | Yes | ++--------------------------------------------+---------+ + +_POSIX_CPUTIME +-------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`clock_getcpuclockid` | Yes | ++--------------------------------+---------+ + +_POSIX_MEMORY_PROTECTION +------------------------ + ++--------------------------------+----------------+ +| API | Support | ++================================+================+ +| :c:func:`mprotect` | Dummy [#fn17]_ | ++--------------------------------+----------------+ + +.. [#fn17] The function returns a success value but doesn't implement + the requred functionality. + +_POSIX_PRIORITIZED_IO +--------------------- + +No functions under this option. + +_POSIX_PRIORITY_SCHEDULING +-------------------------- + ++-------------------------------------------+---------+ +| API | Support | ++===========================================+=========+ +| :c:func:`sched_get_priority_max` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sched_get_priority_min` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sched_getparam` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sched_getscheduler` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sched_rr_get_interval` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sched_setparam` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sched_setscheduler` | Yes | ++-------------------------------------------+---------+ +| :c:func:`sched_yield` | Yes | ++-------------------------------------------+---------+ +| :c:func:`posix_spawnattr_getschedparam` | Yes | ++-------------------------------------------+---------+ +| :c:func:`posix_spawnattr_setschedparam` | Yes | ++-------------------------------------------+---------+ +| :c:func:`posix_spawnattr_getschedpolicy` | Yes | ++-------------------------------------------+---------+ +| :c:func:`posix_spawnattr_setschedpolicy` | Yes | ++-------------------------------------------+---------+ + +_POSIX_RAW_SOCKETS +------------------ + +No functions under this option. + +_POSIX_SPAWN +------------ + +Depends on ``CONFIG_BUILD_KERNEL``. + ++---------------------------------------------+---------+ +| API | Support | ++=============================================+=========+ +| :c:func:`posix_spawn` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawn_file_actions_addclose` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawn_file_actions_adddup2` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawn_file_actions_addopen` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawn_file_actions_destroy` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawn_file_actions_init` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_destroy` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_getflags` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_getpgroup` | No | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_getsigdefault` | No | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_getsigmask` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_init` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_setflags` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_setpgroup` | No | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_setsigdefault` | No | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnattr_setsigmask` | Yes | ++---------------------------------------------+---------+ +| :c:func:`posix_spawnp` | Yes | ++---------------------------------------------+---------+ + +_POSIX_SPIN_LOCKS +----------------- + +Depends on ``CONFIG_PTHREAD_SPINLOCKS``. + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`pthread_spin_destroy` | Yes | ++--------------------------------+---------+ +| :c:func:`pthread_spin_init` | Yes | ++--------------------------------+---------+ +| :c:func:`pthread_spin_lock` | Yes | ++--------------------------------+---------+ +| :c:func:`pthread_spin_trylock` | Yes | ++--------------------------------+---------+ +| :c:func:`pthread_spin_unlock` | Yes | ++--------------------------------+---------+ + +_POSIX_SPORADIC_SERVER +---------------------- + +No functions under this option. + +_POSIX_THREAD_PROCESS_SHARED +---------------------------- + ++------------------------------------------+---------+ +| API | Support | ++==========================================+=========+ +| :c:func:`pthread_condattr_getpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_condattr_setpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_mutexattr_getpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_mutexattr_setpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlockattr_getpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlockattr_setpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_getpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_barrierattr_setpshared` | Yes | ++------------------------------------------+---------+ + +_POSIX_ADVISORY_INFO +-------------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| posix_fadvise() | No | ++--------------------------------+---------+ +| :c:func:`posix_fallocate` | Yes | ++--------------------------------+---------+ +| :c:func:`posix_memalign` | Yes | ++--------------------------------+---------+ +| posix_madvise() | Empty | ++--------------------------------+---------+ + +_POSIX_SAVED_IDS +---------------- + +No functions under this option. + +_POSIX_VDISABLE +--------------- + +No functions under this option. + +_POSIX2_CHAR_TERM +----------------- + +No utilities under this option. + +_POSIX2_FORT_DEV +---------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| fort77 | No | ++--------------------------------+---------+ + +_POSIX2_FORT_RUN +---------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| asa | No | ++--------------------------------+---------+ + +_POSIX2_LOCALEDEF +----------------- + +No utilities under this option. + +_POSIX2_PBS +----------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| qalter | No | ++--------------------------------+---------+ +| qdel | No | ++--------------------------------+---------+ +| qhold | No | ++--------------------------------+---------+ +| qmove | No | ++--------------------------------+---------+ +| qmsg | No | ++--------------------------------+---------+ +| qrerun | No | ++--------------------------------+---------+ +| qrls | No | ++--------------------------------+---------+ +| qselect | No | ++--------------------------------+---------+ +| qsig | No | ++--------------------------------+---------+ +| qstat | No | ++--------------------------------+---------+ +| qsub | No | ++--------------------------------+---------+ + +_POSIX2_PBS_ACCOUNTING +---------------------- + +No utilities under this option. + +_POSIX2_PBS_CHECKPOINT +---------------------- + +No utilities under this option. + +_POSIX2_PBS_LOCATE +------------------ + +No utilities under this option. + +_POSIX2_PBS_MESSAGE +------------------- + +No utilities under this option. + +_POSIX2_PBS_TRACK +----------------- + +No utilities under this option. + +_POSIX2_UPE +----------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| nm | No | ++--------------------------------+---------+ + +_XOPEN_CRYPT +------------ + +Depends on ``CONFIG_CRYPTO``; + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`crypt` | Yes | ++--------------------------------+---------+ +| encrypt() | No | ++--------------------------------+---------+ +| setkey() | No | ++--------------------------------+---------+ + +_XOPEN_ENH_I18N +--------------- + +No interfaces fall under this option. + +_XOPEN_LEGACY +------------- + ++--------------------------------+---------+ +| API | Support | ++================================+=========+ +| :c:func:`bcmp` | Yes | ++--------------------------------+---------+ +| :c:func:`bcopy` | Yes | ++--------------------------------+---------+ +| :c:func:`bzero` | Yes | ++--------------------------------+---------+ +| ecvt() | No | ++--------------------------------+---------+ +| fcvt() | No | ++--------------------------------+---------+ +| ftime() | No | ++--------------------------------+---------+ +| gcvt() | No | ++--------------------------------+---------+ +| getwd() | No | ++--------------------------------+---------+ +| index() | No | ++--------------------------------+---------+ +| :c:func:`mktemp` | Yes | ++--------------------------------+---------+ +| :c:func:`rindex` | Yes | ++--------------------------------+---------+ +| :c:func:`utimes` | Yes | ++--------------------------------+---------+ +| :c:func:`wcswcs` | Yes | ++--------------------------------+---------+ + +_XOPEN_STREAMS +-------------- + ++---------------------------------+---------+ +| API | Support | ++=================================+=========+ +| fattach() | No | ++---------------------------------+---------+ +| fdetach() | No | ++---------------------------------+---------+ +| getmsg() | No | ++---------------------------------+---------+ +| getpmsg() | No | ++---------------------------------+---------+ +| :c:func:`ioctl` | Yes | ++---------------------------------+---------+ +| isastream() | No | ++---------------------------------+---------+ +| putmsg() | No | ++---------------------------------+---------+ +| putpmsg() | No | ++---------------------------------+---------+ + +POSIX_BARRIERS +-------------- + ++----------------------------------------+---------+ +| API | Support | ++========================================+=========+ +| :c:func:`pthread_barrier_destroy` | Yes | ++----------------------------------------+---------+ +| :c:func:`pthread_barrier_init` | Yes | ++----------------------------------------+---------+ +| :c:func:`pthread_barrier_wait` | Yes | ++----------------------------------------+---------+ +| :c:func:`pthread_barrierattr_destroy` | Yes | ++----------------------------------------+---------+ +| :c:func:`pthread_barrierattr_init` | Yes | ++----------------------------------------+---------+ + +POSIX_RW_LOCKS +-------------- + +Reader Writer Locks: + ++------------------------------------------+---------+ +| API | Support | ++==========================================+=========+ +| :c:func:`pthread_rwlock_clockrdlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_clockwrlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_destroy` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_init` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_rdlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_timedrdlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_timedwrlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_tryrdlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_trywrlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_unlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlock_wrlock` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlockattr_destroy` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlockattr_init` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlockattr_getpshared` | Yes | ++------------------------------------------+---------+ +| :c:func:`pthread_rwlockattr_setpshared` | Yes | ++------------------------------------------+---------+ + +_POSIX2_C_DEV +------------- + ++-----------------------------------+---------+ +| API | Support | ++===================================+=========+ +| c99 | No | ++-----------------------------------+---------+ +| lex | No | ++-----------------------------------+---------+ +| yacc | No | ++-----------------------------------+---------+ + +_POSIX2_SW_DEV +-------------- + ++-----------------------------------+---------+ +| API | Support | ++===================================+=========+ +| ar | No | ++-----------------------------------+---------+ +| make | No | ++-----------------------------------+---------+ +| strip | No | ++-----------------------------------+---------+ +| nm | No | ++-----------------------------------+---------+ + +References +========== + +* IEEE Std 1003.13, 2003 - Standardized Application Environment Profile (AEP)—POSIX® Realtime and Embedded Application Support + +* `IEEE Std 1003.1, 2004 Subprofiling Option Groups <https://pubs.opengroup.org/onlinepubs/009604299/xrat/subprofiles.html>`_ + +* `IEEE Std 1003.1, 2008 Subprofiling Option Groups <https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/xrat/V4_subprofiles.html>`_ + +* `IEEE Std 1003.1, 2013 Subprofiling Option Groups <https://pubs.opengroup.org/onlinepubs/9699919799.2013edition/xrat/V4_subprofiles.html>`_ + +* `IEEE Std 1003.1, 2016 Subprofiling Option Groups <https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/xrat/V4_subprofiles.html>`_ + +* `IEEE Std 1003.1, 2018 Subprofiling Option Groups <https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/xrat/V4_subprofiles.html>`_ + +* `IEEE Std 1003.1, 2024 Subprofiling Option Groups <https://pubs.opengroup.org/onlinepubs/9799919799/xrat/V4_subprofiles.html>`_