blob: 577abf16ce58eac75dbb4d076ac6b9e30993da8e [file] [log] [blame]
=====
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 | ``CONFIG_ARCH_SETJMP_H`` |
+------------------------------+----------------+--------------------------+
| `POSIX_C_LANG_SUPPORT`_ | 94/105 [#fn1]_ | |
+------------------------------+----------------+--------------------------+
| `POSIX_DEVICE_IO`_ | Yes | |
+------------------------------+----------------+--------------------------+
| `POSIX_FILE_LOCKING`_ | Yes | |
+------------------------------+----------------+--------------------------+
| `POSIX_SINGLE_PROCESS`_ | 8/9 | |
+------------------------------+----------------+--------------------------+
| `POSIX_THREADS_BASE`_ | Yes | |
+------------------------------+----------------+--------------------------+
| `POSIX_THREADS_EXT`_ [#fn2]_ | Yes | |
+------------------------------+----------------+--------------------------+
| `XSI_THREADS_EXT`_ | Yes | |
+------------------------------+----------------+--------------------------+
.. [#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] Required only for the development platform.
For PSE54 this requirement is also for execution platform which 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`_ | Yes | ``CONFIG_ARCH_SETJMP_H`` |
+-----------------------------+---------+--------------------------+
.. [#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() | Yes |
+--------------------------------+---------+
| 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 |
+======================================+=========+
| :c:func:`pthread_attr_getguardsize` | Yes |
+--------------------------------------+---------+
| :c:func:`pthread_attr_setguardsize` | Yes |
+--------------------------------------+---------+
| :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() | Yes |
+--------------------------------+---------+
| sigsetjmp() | Yes |
+--------------------------------+---------+
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 |
+----------------------------------+---------+
| :c:func:`pthread_getconcurrency` | Yes |
+----------------------------------+---------+
| :c:func:`pthread_setconcurrency` | Yes |
+----------------------------------+---------+
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 required 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 required 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 required 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>`_