POSIX Option and Option Group Details
#####################################

.. _posix_option_groups:

POSIX Option Groups
===================

.. _posix_option_group_barriers:

POSIX_BARRIERS
++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_BARRIERS`.

.. csv-table:: POSIX_BARRIERS
   :header: API, Supported
   :widths: 50,10

    pthread_barrier_destroy(),yes
    pthread_barrier_init(),yes
    pthread_barrier_wait(),yes
    pthread_barrierattr_destroy(),yes
    pthread_barrierattr_init(),yes

.. _posix_option_group_c_lang_jump:

POSIX_C_LANG_JUMP
+++++++++++++++++

The ``POSIX_C_LANG_JUMP`` Option Group is included in the ISO C standard.

.. note::
   When using Newlib, Picolibc, or other C libraries conforming to the ISO C Standard, the
   ``POSIX_C_LANG_JUMP`` Option Group is considered supported.

.. csv-table:: POSIX_C_LANG_JUMP
   :header: API, Supported
   :widths: 50,10

    setjmp(), yes
    longjmp(), yes

.. _posix_option_group_c_lang_math:

POSIX_C_LANG_MATH
+++++++++++++++++

The ``POSIX_C_LANG_MATH`` Option Group is included in the ISO C standard.

.. note::
   When using Newlib, Picolibc, or other C libraries conforming to the ISO C Standard, the
   ``POSIX_C_LANG_MATH`` Option Group is considered supported.

Please refer to `Subprofiling Considerations`_ for details on the ``POSIX_C_LANG_MATH`` Option
Group.

.. _posix_option_group_c_lang_support:

POSIX_C_LANG_SUPPORT
++++++++++++++++++++

The POSIX_C_LANG_SUPPORT option group contains the general ISO C Library.

.. note::
   When using Newlib, Picolibc, or other C libraries conforming to the ISO C Standard, the entire
   ``POSIX_C_LANG_SUPPORT`` Option Group is considered supported.

Please refer to `Subprofiling Considerations`_ for details on the ``POSIX_C_LANG_SUPPORT`` Option
Group.

For more information on developing Zephyr applications in the C programming language, please refer
to :ref:`details<language_support>`.

.. _posix_option_group_c_lang_support_r:

POSIX_C_LANG_SUPPORT_R
++++++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_C_LANG_SUPPORT_R`.

.. csv-table:: POSIX_C_LANG_SUPPORT_R
   :header: API, Supported
   :widths: 50,10

    asctime_r(),yes
    ctime_r(),yes
    gmtime_r(),yes
    localtime_r(),yes
    rand_r(),yes
    strerror_r(),yes
    strtok_r(),yes

.. _posix_option_group_c_lib_ext:

POSIX_C_LIB_EXT
+++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_C_LIB_EXT`.

.. csv-table:: POSIX_C_LIB_EXT
   :header: API, Supported
   :widths: 50,10

    fnmatch(), yes
    getopt(), yes
    getsubopt(),
    optarg, yes
    opterr, yes
    optind, yes
    optopt, yes
    stpcpy(),
    stpncpy(),
    strcasecmp(),
    strdup(),
    strfmon(),
    strncasecmp(), yes
    strndup(),
    strnlen(), yes

.. _posix_option_group_clock_selection:

POSIX_CLOCK_SELECTION
+++++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_CLOCK_SELECTION`.

.. csv-table:: POSIX_CLOCK_SELECTION
   :header: API, Supported
   :widths: 50,10

    pthread_condattr_getclock(),yes
    pthread_condattr_setclock(),yes
    clock_nanosleep(),yes

.. _posix_option_group_device_io:

POSIX_DEVICE_IO
+++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_DEVICE_IO`.

.. note::
   When using Newlib, Picolibc, or other C libraries conforming to the ISO C Standard, the
   C89 components of the ``POSIX_DEVICE_IO`` Option Group are considered supported.

.. csv-table:: POSIX_DEVICE_IO
   :header: API, Supported
   :widths: 50,10

    FD_CLR(),yes
    FD_ISSET(),yes
    FD_SET(),yes
    FD_ZERO(),yes
    clearerr(),yes
    close(),yes
    fclose(),yes
    fdopen(),yes
    feof(),yes
    ferror(),yes
    fflush(),yes
    fgetc(),yes
    fgets(),yes
    fileno(),yes
    fopen(),yes
    fprintf(),yes
    fputc(),yes
    fputs(),yes
    fread(),yes
    freopen(),yes
    fscanf(),yes
    fwrite(),yes
    getc(),yes
    getchar(),yes
    gets(),yes
    open(),yes
    perror(),yes
    poll(),yes
    printf(),yes
    pread(),yes
    pselect(),yes
    putc(),yes
    putchar(),yes
    puts(),yes
    pwrite(),yes
    read(),yes
    scanf(),yes
    select(),yes
    setbuf(),yes
    setvbuf(),yes
    stderr,yes
    stdin,yes
    stdout,yes
    ungetc(),yes
    vfprintf(),yes
    vfscanf(),yes
    vprintf(),yes
    vscanf(),yes
    write(),yes

.. _posix_option_group_fd_mgmt:

POSIX_FD_MGMT
+++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_FD_MGMT`.

.. csv-table:: POSIX_FD_MGMT
   :header: API, Supported
   :widths: 50,10

    dup(),
    dup2(),
    fcntl(),
    fgetpos(),
    fseek(),
    fseeko(),
    fsetpos(),
    ftell(),
    ftello(),
    ftruncate(),yes
    lseek(),
    rewind(),

.. _posix_option_group_file_locking:

POSIX_FILE_LOCKING
++++++++++++++++++

.. csv-table:: POSIX_FILE_LOCKING
   :header: API, Supported
   :widths: 50,10

    flockfile(),
    ftrylockfile(),
    funlockfile(),
    getc_unlocked(),
    getchar_unlocked(),
    putc_unlocked(),
    putchar_unlocked(),

.. _posix_option_group_file_system:

POSIX_FILE_SYSTEM
+++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_FILE_SYSTEM`.

.. csv-table:: POSIX_FILE_SYSTEM
   :header: API, Supported
   :widths: 50,10

    access(),
    chdir(),
    closedir(), yes
    creat(),
    fchdir(),
    fpathconf(),
    fstat(), yes
    fstatvfs(),
    getcwd(),
    link(),
    mkdir(), yes
    mkstemp(),
    opendir(), yes
    pathconf(),
    readdir(), yes
    remove(), yes
    rename(), yes
    rewinddir(),
    rmdir(), yes
    stat(), yes
    statvfs(),
    tmpfile(),
    tmpnam(),
    truncate(),
    unlink(), yes
    utime(),

.. _posix_option_group_file_system_r:

POSIX_FILE_SYSTEM_R
+++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_FILE_SYSTEM_R`.

.. csv-table:: POSIX_FILE_SYSTEM_R
   :header: API, Supported
   :widths: 50,10

    readdir_r(), yes

.. _posix_option_group_mapped_files:

POSIX_MAPPED_FILES
++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_MAPPED_FILES`.

.. csv-table:: POSIX_MAPPED_FILES
   :header: API, Supported
   :widths: 50,10

    mmap(),yes
    msync(),yes
    munmap(),yes

.. _posix_option_group_memory_protection:

POSIX_MEMORY_PROTECTION
+++++++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_MEMORY_PROTECTION`.

.. csv-table:: POSIX_MEMORY_PROTECTION
   :header: API, Supported
   :widths: 50,10

    mprotect(), yes :ref:`†<posix_undefined_behaviour>`

.. _posix_option_group_multi_process:

POSIX_MULTI_PROCESS
+++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_MULTI_PROCESS`.

.. csv-table:: POSIX_MULTI_PROCESS
   :header: API, Supported
   :widths: 50,10

    _Exit(), yes
    _exit(), yes
    assert(), yes
    atexit(),:ref:`†<posix_undefined_behaviour>`
    clock(),
    execl(),:ref:`†<posix_undefined_behaviour>`
    execle(),:ref:`†<posix_undefined_behaviour>`
    execlp(),:ref:`†<posix_undefined_behaviour>`
    execv(),:ref:`†<posix_undefined_behaviour>`
    execve(),:ref:`†<posix_undefined_behaviour>`
    execvp(),:ref:`†<posix_undefined_behaviour>`
    exit(), yes
    fork(),:ref:`†<posix_undefined_behaviour>`
    getpgrp(),:ref:`†<posix_undefined_behaviour>`
    getpgid(),:ref:`†<posix_undefined_behaviour>`
    getpid(), yes :ref:`†<posix_undefined_behaviour>`
    getppid(),:ref:`†<posix_undefined_behaviour>`
    getsid(),:ref:`†<posix_undefined_behaviour>`
    setsid(),:ref:`†<posix_undefined_behaviour>`
    sleep(),yes
    times(),
    wait(),:ref:`†<posix_undefined_behaviour>`
    waitid(),:ref:`†<posix_undefined_behaviour>`
    waitpid(),:ref:`†<posix_undefined_behaviour>`

.. _posix_option_group_networking:

POSIX_NETWORKING
++++++++++++++++

The function ``sockatmark()`` is not yet supported and is expected to fail setting ``errno``
to ``ENOSYS`` :ref:`†<posix_undefined_behaviour>`.

Enable this option group with :kconfig:option:`CONFIG_POSIX_NETWORKING`.

.. csv-table:: POSIX_NETWORKING
   :header: API, Supported
   :widths: 50,10

    accept(),yes
    bind(),yes
    connect(),yes
    endhostent(),yes
    endnetent(),yes
    endprotoent(),yes
    endservent(),yes
    freeaddrinfo(),yes
    gai_strerror(),yes
    getaddrinfo(),yes
    gethostent(),yes
    gethostname(),yes
    getnameinfo(),yes
    getnetbyaddr(),yes
    getnetbyname(),yes
    getnetent(),yes
    getpeername(),yes
    getprotobyname(),yes
    getprotobynumber(),yes
    getprotoent(),yes
    getservbyname(),yes
    getservbyport(),yes
    getservent(),yes
    getsockname(),yes
    getsockopt(),yes
    htonl(),yes
    htons(),yes
    if_freenameindex(),yes
    if_indextoname(),yes
    if_nameindex(),yes
    if_nametoindex(),yes
    inet_addr(),yes
    inet_ntoa(),yes
    inet_ntop(),yes
    inet_pton(),yes
    listen(),yes
    ntohl(),yes
    ntohs(),yes
    recv(),yes
    recvfrom(),yes
    recvmsg(),yes
    send(),yes
    sendmsg(),yes
    sendto(),yes
    sethostent(),yes
    setnetent(),yes
    setprotoent(),yes
    setservent(),yes
    setsockopt(),yes
    shutdown(),yes
    socket(),yes
    sockatmark(),yes :ref:`†<posix_undefined_behaviour>`
    socketpair(),yes

.. _posix_option_group_pipe:

POSIX_PIPE
++++++++++

.. csv-table:: POSIX_PIPE
   :header: API, Supported
   :widths: 50,10

    pipe(),

.. _posix_option_group_realtime_signals:

POSIX_REALTIME_SIGNALS
++++++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_REALTIME_SIGNALS`.

.. csv-table:: POSIX_REALTIME_SIGNALS
   :header: API, Supported
   :widths: 50,10

    sigqueue(),
    sigtimedwait(),
    sigwaitinfo(),

..
   this link is "deprecated" - mainly left here so that older links still work

.. _posix_option_reader_writer_locks:

.. _posix_option_group_rw_locks:

POSIX_RW_LOCKS
++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_RW_LOCKS`.

.. csv-table:: POSIX_RW_LOCKS
   :header: API, Supported
   :widths: 50,10

    pthread_rwlock_destroy(),yes
    pthread_rwlock_init(),yes
    pthread_rwlock_rdlock(),yes
    pthread_rwlock_tryrdlock(),yes
    pthread_rwlock_trywrlock(),yes
    pthread_rwlock_unlock(),yes
    pthread_rwlock_wrlock(),yes
    pthread_rwlockattr_destroy(),yes
    pthread_rwlockattr_getpshared(),yes
    pthread_rwlockattr_init(),yes
    pthread_rwlockattr_setpshared(),yes

.. _posix_option_group_semaphores:

POSIX_SEMAPHORES
++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_SEMAPHORES`.

.. csv-table:: POSIX_SEMAPHORES
   :header: API, Supported
   :widths: 50,10

    sem_close(),yes
    sem_destroy(),yes
    sem_getvalue(),yes
    sem_init(),yes
    sem_open(),yes
    sem_post(),yes
    sem_trywait(),yes
    sem_unlink(),yes
    sem_wait(),yes

.. _posix_option_group_signal_jump:

POSIX_SIGNAL_JUMP
+++++++++++++++++

.. csv-table:: POSIX_SIGNAL_JUMP
   :header: API, Supported
   :widths: 50,10

    siglongjmp(),
    sigsetjmp(),

.. _posix_option_group_signals:

POSIX_SIGNALS
+++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_SIGNALS`.

.. note::
   As processes are not yet supported in Zephyr, the ISO C functions ``abort()``, ``signal()``,
   and ``raise()``, as well as the other POSIX functions listed below, may exhibit undefined
   behaviour. The POSIX functions ``kill()``, ``pause()``, ``sigaction()``, ``sigpending()``,
   ``sigsuspend()``, and ``sigwait()`` are implemented to ensure that conformant applications can
   link, but they are expected to fail, setting errno to ``ENOSYS``
   :ref:`†<posix_undefined_behaviour>`.

.. csv-table:: POSIX_SIGNALS
   :header: API, Supported
   :widths: 50,10

    abort(),yes :ref:`†<posix_undefined_behaviour>`
    alarm(),yes :ref:`†<posix_undefined_behaviour>`
    kill(),yes :ref:`†<posix_undefined_behaviour>`
    pause(),yes :ref:`†<posix_undefined_behaviour>`
    raise(),yes :ref:`†<posix_undefined_behaviour>`
    sigaction(),yes :ref:`†<posix_undefined_behaviour>`
    sigaddset(),yes
    sigdelset(),yes
    sigemptyset(),yes
    sigfillset(),yes
    sigismember(),yes
    signal(),yes :ref:`†<posix_undefined_behaviour>`
    sigpending(),yes :ref:`†<posix_undefined_behaviour>`
    sigprocmask(),yes
    sigsuspend(),yes :ref:`†<posix_undefined_behaviour>`
    sigwait(),yes :ref:`†<posix_undefined_behaviour>`
    strsignal(),yes

.. _posix_option_group_single_process:

POSIX_SINGLE_PROCESS
++++++++++++++++++++

The POSIX_SINGLE_PROCESS option group contains services for single
process applications.

Enable this option group with :kconfig:option:`CONFIG_POSIX_SINGLE_PROCESS`.

.. csv-table:: POSIX_SINGLE_PROCESS
   :header: API, Supported
   :widths: 50,10

    confstr(),yes
    environ,yes
    errno,yes
    getenv(),yes
    setenv(),yes
    sysconf(),yes
    uname(),yes
    unsetenv(),yes

.. _posix_option_group_spin_locks:

POSIX_SPIN_LOCKS
++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_SPIN_LOCKS`.

.. csv-table:: POSIX_SPIN_LOCKS
   :header: API, Supported
   :widths: 50,10

    pthread_spin_destroy(),yes
    pthread_spin_init(),yes
    pthread_spin_lock(),yes
    pthread_spin_trylock(),yes
    pthread_spin_unlock(),yes

.. _posix_option_group_threads_base:

POSIX_THREADS_BASE
++++++++++++++++++

The basic assumption in this profile is that the system
consists of a single (implicit) process with multiple threads. Therefore, the
standard requires all basic thread services, except those related to
multiple processes.

Enable this option group with :kconfig:option:`CONFIG_POSIX_THREADS`.

.. csv-table:: POSIX_THREADS_BASE
   :header: API, Supported
   :widths: 50,10

    pthread_atfork(),yes
    pthread_attr_destroy(),yes
    pthread_attr_getdetachstate(),yes
    pthread_attr_getschedparam(),yes
    pthread_attr_init(),yes
    pthread_attr_setdetachstate(),yes
    pthread_attr_setschedparam(),yes
    pthread_barrier_destroy(),yes
    pthread_barrier_init(),yes
    pthread_barrier_wait(),yes
    pthread_barrierattr_destroy(),yes
    pthread_barrierattr_getpshared(),yes
    pthread_barrierattr_init(),yes
    pthread_barrierattr_setpshared(),yes
    pthread_cancel(),yes
    pthread_cleanup_pop(),yes
    pthread_cleanup_push(),yes
    pthread_cond_broadcast(),yes
    pthread_cond_destroy(),yes
    pthread_cond_init(),yes
    pthread_cond_signal(),yes
    pthread_cond_timedwait(),yes
    pthread_cond_wait(),yes
    pthread_condattr_destroy(),yes
    pthread_condattr_init(),yes
    pthread_create(),yes
    pthread_detach(),yes
    pthread_equal(),yes
    pthread_exit(),yes
    pthread_getspecific(),yes
    pthread_join(),yes
    pthread_key_create(),yes
    pthread_key_delete(),yes
    pthread_kill(),
    pthread_mutex_destroy(),yes
    pthread_mutex_init(),yes
    pthread_mutex_lock(),yes
    pthread_mutex_trylock(),yes
    pthread_mutex_unlock(),yes
    pthread_mutexattr_destroy(),yes
    pthread_mutexattr_init(),yes
    pthread_once(),yes
    pthread_self(),yes
    pthread_setcancelstate(),yes
    pthread_setcanceltype(),yes
    pthread_setspecific(),yes
    pthread_sigmask(),yes
    pthread_testcancel(),yes
    sched_yield(),yes

.. _posix_option_group_posix_threads_ext:

POSIX_THREADS_EXT
+++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_THREADS_EXT`.

.. csv-table:: POSIX_THREADS_EXT
   :header: API, Supported
   :widths: 50,10

    pthread_attr_getguardsize(),yes
    pthread_attr_setguardsize(),yes
    pthread_mutexattr_gettype(),yes
    pthread_mutexattr_settype(),yes

.. _posix_option_group_timers:

POSIX_TIMERS
++++++++++++

Enable this option group with :kconfig:option:`CONFIG_POSIX_TIMERS`.

.. csv-table:: POSIX_TIMERS
   :header: API, Supported
   :widths: 50,10

    clock_getres(),yes
    clock_gettime(),yes
    clock_settime(),yes
    nanosleep(),yes
    timer_create(),yes
    timer_delete(),yes
    timer_gettime(),yes
    timer_getoverrun(),yes
    timer_settime(),yes

.. _posix_option_group_xsi_realtime:

XSI_REALTIME
++++++++++++

The ``XSI_REALTIME`` option group indicates that the :ref:`_POSIX_FSYNC<posix_option_fsync>`,
:ref:`_POSIX_MEMLOCK<posix_option_memlock>`,
:ref:`_POSIX_MEMLOCK_RANGE<posix_option_memlock_range>`,
:ref:`_POSIX_MESSAGE_PASSING<posix_option_message_passing>`,
:ref:`_POSIX_PRIORITY_SCHEDULING<posix_option_priority_scheduling>`,
:ref:`_POSIX_SHARED_MEMORY_OBJECTS<posix_option_shared_memory_objects>`, and
:ref:`_POSIX_SYNCHRONIZED_IO<posix_option_synchronized_io>` options are enabled.

Enable this option group with :kconfig:option:`CONFIG_XSI_REALTIME`.

When this option group is enabled, the ``_XOPEN_REALTIME`` feature test macro will be defined to a
value other than -1.

.. _posix_option_group_xsi_single_process:

XSI_SINGLE_PROCESS
++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_XSI_SINGLE_PROCESS`.

.. csv-table:: XSI_SINGLE_PROCESS
   :header: API, Supported
   :widths: 50,10

    gethostid(),yes
    gettimeofday(),yes
    putenv(),yes

.. _posix_option_group_xsi_system_logging:

XSI_SYSTEM_LOGGING
++++++++++++++++++

Enable this option group with :kconfig:option:`CONFIG_XSI_SYSTEM_LOGGING`.

.. csv-table:: XSI_SYSTEM_LOGGING
   :header: API, Supported
   :widths: 50,10

    closelog(),yes
    openlog(),yes
    setlogmask(),yes
    syslog(),yes

.. _posix_option_group_xsi_threads_ext:

XSI_THREADS_EXT
+++++++++++++++

The XSI_THREADS_EXT option group is required because it provides
functions to control a thread's stack. This is considered useful for any
real-time application.

Enable this option group with :kconfig:option:`CONFIG_XSI_THREADS_EXT`.

.. csv-table:: XSI_THREADS_EXT
   :header: API, Supported
   :widths: 50,10

    pthread_attr_getstack(),yes
    pthread_attr_setstack(),yes
    pthread_getconcurrency(),yes
    pthread_setconcurrency(),yes

.. _posix_options:

POSIX Options
=============

.. _posix_option_asynchronous_io:

_POSIX_ASYNCHRONOUS_IO
++++++++++++++++++++++

Functions part of the ``_POSIX_ASYNCHRONOUS_IO`` Option are not implemented in Zephyr but are
provided so that conformant applications can still link. These functions will fail, setting
``errno`` to ``ENOSYS``:ref:`†<posix_undefined_behaviour>`.

Enable this option with :kconfig:option:`CONFIG_POSIX_ASYNCHRONOUS_IO`.

.. csv-table:: _POSIX_ASYNCHRONOUS_IO
   :header: API, Supported
   :widths: 50,10

    aio_cancel(),yes :ref:`†<posix_undefined_behaviour>`
    aio_error(),yes :ref:`†<posix_undefined_behaviour>`
    aio_fsync(),yes :ref:`†<posix_undefined_behaviour>`
    aio_read(),yes :ref:`†<posix_undefined_behaviour>`
    aio_return(),yes :ref:`†<posix_undefined_behaviour>`
    aio_suspend(),yes :ref:`†<posix_undefined_behaviour>`
    aio_write(),yes :ref:`†<posix_undefined_behaviour>`
    lio_listio(),yes :ref:`†<posix_undefined_behaviour>`

.. _posix_option_cputime:

_POSIX_CPUTIME
++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_CPUTIME`.

.. csv-table:: _POSIX_CPUTIME
   :header: API, Supported
   :widths: 50,10

    CLOCK_PROCESS_CPUTIME_ID,yes

.. _posix_option_fsync:

_POSIX_FSYNC
++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_FSYNC`.

.. csv-table:: _POSIX_FSYNC
   :header: API, Supported
   :widths: 50,10

    fsync(),yes

.. _posix_option_ipv6:

_POSIX_IPV6
+++++++++++

Internet Protocol Version 6 is supported.

For more information, please refer to :ref:`Networking <networking>`.

Enable this option with :kconfig:option:`CONFIG_POSIX_IPV6`.

.. _posix_option_memlock:

_POSIX_MEMLOCK
++++++++++++++

Zephyr's :ref:`Demand Paging API <memory_management_api_demand_paging>` does not yet support
pinning or unpinning all virtual memory regions. The functions below are expected to fail and
set ``errno`` to ``ENOSYS`` :ref:`†<posix_undefined_behaviour>`.

Enable this option with :kconfig:option:`CONFIG_POSIX_MEMLOCK`.

.. csv-table:: _POSIX_MEMLOCK
   :header: API, Supported
   :widths: 50,10

    mlockall(), yes
    munlockall(), yes

.. _posix_option_memlock_range:

_POSIX_MEMLOCK_RANGE
++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_MEMLOCK_RANGE`.

.. csv-table:: _POSIX_MEMLOCK_RANGE
   :header: API, Supported
   :widths: 50,10

    mlock(), yes
    munlock(), yes

.. _posix_option_message_passing:

_POSIX_MESSAGE_PASSING
++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_MESSAGE_PASSING`.

.. csv-table:: _POSIX_MESSAGE_PASSING
   :header: API, Supported
   :widths: 50,10

    mq_close(),yes
    mq_getattr(),yes
    mq_notify(),yes
    mq_open(),yes
    mq_receive(),yes
    mq_send(),yes
    mq_setattr(),yes
    mq_unlink(),yes

.. _posix_option_monotonic_clock:

_POSIX_MONOTONIC_CLOCK
++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_MONOTONIC_CLOCK`.

.. csv-table:: _POSIX_MONOTONIC_CLOCK
   :header: API, Supported
   :widths: 50,10

    CLOCK_MONOTONIC,yes

.. _posix_option_priority_scheduling:

_POSIX_PRIORITY_SCHEDULING
++++++++++++++++++++++++++

As processes are not yet supported in Zephyr, the functions ``sched_rr_get_interval()``,
``sched_setparam()``, and ``sched_setscheduler()`` are expected to fail setting ``errno``
to ``ENOSYS``:ref:`†<posix_undefined_behaviour>`.

Enable this option with :kconfig:option:`CONFIG_POSIX_PRIORITY_SCHEDULING`.

.. csv-table:: _POSIX_PRIORITY_SCHEDULING
   :header: API, Supported
   :widths: 50,10

    sched_get_priority_max(),yes
    sched_get_priority_min(),yes
    sched_getparam(),yes
    sched_getscheduler(),yes
    sched_rr_get_interval(),yes :ref:`†<posix_undefined_behaviour>`
    sched_setparam(),yes :ref:`†<posix_undefined_behaviour>`
    sched_setscheduler(),yes :ref:`†<posix_undefined_behaviour>`

.. _posix_option_raw_sockets:

_POSIX_RAW_SOCKETS
++++++++++++++++++

Raw sockets are supported.

For more information, please refer to :kconfig:option:`CONFIG_NET_SOCKETS_PACKET`.

Enable this option with :kconfig:option:`CONFIG_POSIX_RAW_SOCKETS`.

.. _posix_shared_memory_objects:

.. _posix_option_shared_memory_objects:

_POSIX_SHARED_MEMORY_OBJECTS
++++++++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_SHARED_MEMORY_OBJECTS`.

.. csv-table:: _POSIX_SHARED_MEMORY_OBJECTS
   :header: API, Supported
   :widths: 50,10

    mmap(), yes
    munmap(), yes
    shm_open(), yes
    shm_unlink(), yes

.. _posix_option_synchronized_io:

_POSIX_SYNCHRONIZED_IO
++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_SYNCHRONIZED_IO`.

.. csv-table:: _POSIX_SYNCHRONIZED_IO
   :header: API, Supported
   :widths: 50,10

    fdatasync(),yes
    fsync(),yes
    msync(),yes

.. _posix_option_thread_attr_stackaddr:

_POSIX_THREAD_ATTR_STACKADDR
++++++++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_THREAD_ATTR_STACKADDR`.

.. csv-table:: _POSIX_THREAD_ATTR_STACKADDR
   :header: API, Supported
   :widths: 50,10

    pthread_attr_getstackaddr(),yes
    pthread_attr_setstackaddr(),yes

.. _posix_option_thread_attr_stacksize:

_POSIX_THREAD_ATTR_STACKSIZE
++++++++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_THREAD_ATTR_STACKSIZE`.

.. csv-table:: _POSIX_THREAD_ATTR_STACKSIZE
   :header: API, Supported
   :widths: 50,10

    pthread_attr_getstacksize(),yes
    pthread_attr_setstacksize(),yes

.. _posix_option_thread_cputime:

_POSIX_THREAD_CPUTIME
+++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_THREAD_CPUTIME`.

.. csv-table:: _POSIX_THREAD_CPUTIME
   :header: API, Supported
   :widths: 50,10

    CLOCK_THREAD_CPUTIME_ID,yes
    pthread_getcpuclockid(),yes

.. _posix_option_thread_prio_inherit:

_POSIX_THREAD_PRIO_INHERIT
++++++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_THREAD_PRIO_INHERIT`.

.. csv-table:: _POSIX_THREAD_PRIO_INHERIT
   :header: API, Supported
   :widths: 50,10

    pthread_mutexattr_getprotocol(),yes
    pthread_mutexattr_setprotocol(),yes

.. _posix_option_thread_prio_protect:

_POSIX_THREAD_PRIO_PROTECT
++++++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_THREAD_PRIO_PROTECT`.

.. csv-table:: _POSIX_THREAD_PRIO_PROTECT
   :header: API, Supported
   :widths: 50,10

    pthread_mutex_getprioceiling(),yes
    pthread_mutex_setprioceiling(),yes
    pthread_mutexattr_getprioceiling(),yes
    pthread_mutexattr_getprotocol(),yes
    pthread_mutexattr_setprioceiling(),yes
    pthread_mutexattr_setprotocol(),yes

.. _posix_option_thread_priority_scheduling:

_POSIX_THREAD_PRIORITY_SCHEDULING
+++++++++++++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_THREAD_PRIORITY_SCHEDULING`.

.. csv-table:: _POSIX_THREAD_PRIORITY_SCHEDULING
   :header: API, Supported
   :widths: 50,10

    pthread_attr_getinheritsched(),yes
    pthread_attr_getschedpolicy(),yes
    pthread_attr_getscope(),yes
    pthread_attr_setinheritsched(),yes
    pthread_attr_setschedpolicy(),yes
    pthread_attr_setscope(),yes
    pthread_getschedparam(),yes
    pthread_setschedparam(),yes
    pthread_setschedprio(),yes

.. _posix_option_thread_safe_functions:

_POSIX_THREAD_SAFE_FUNCTIONS
++++++++++++++++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_THREAD_SAFE_FUNCTIONS`.

.. csv-table:: _POSIX_THREAD_SAFE_FUNCTIONS
    :header: API, Supported
    :widths: 50,10

    asctime_r(), yes
    ctime_r(), yes (UTC timezone only)
    flockfile(),
    ftrylockfile(),
    funlockfile(),
    getc_unlocked(),
    getchar_unlocked(),
    getgrgid_r(),yes :ref:`†<posix_undefined_behaviour>`
    getgrnam_r(),yes :ref:`†<posix_undefined_behaviour>`
    getpwnam_r(),yes :ref:`†<posix_undefined_behaviour>`
    getpwuid_r(),yes :ref:`†<posix_undefined_behaviour>`
    gmtime_r(), yes
    localtime_r(), yes (UTC timezone only)
    putc_unlocked(),
    putchar_unlocked(),
    rand_r(), yes
    readdir_r(), yes
    strerror_r(), yes
    strtok_r(), yes

.. _posix_option_timeouts:

_POSIX_TIMEOUTS
+++++++++++++++

Enable this option with :kconfig:option:`CONFIG_POSIX_TIMEOUTS`.

.. csv-table:: _POSIX_TIMEOUTS
   :header: API, Supported
   :widths: 50,10

    mq_timedreceive(),yes
    mq_timedsend(),yes
    pthread_mutex_timedlock(),yes
    pthread_rwlock_timedrdlock(),yes
    pthread_rwlock_timedwrlock(),yes
    sem_timedwait(),yes
    posix_trace_timedgetnext_event(),

.. _posix_option_xopen_streams:

_XOPEN_STREAMS
++++++++++++++

With the exception of ``ioctl()``, functions in the ``_XOPEN_STREAMS`` option group are not
implemented in Zephyr but are provided so that conformant applications can still link.
Unimplemented functions in this option group will fail, setting ``errno`` to ``ENOSYS``
:ref:`†<posix_undefined_behaviour>`.

Enable this option with :kconfig:option:`CONFIG_XOPEN_STREAMS`.

.. csv-table:: _XOPEN_STREAMS
   :header: API, Supported
   :widths: 50,10

    fattach(), yes :ref:`†<posix_undefined_behaviour>`
    fdetach(), yes :ref:`†<posix_undefined_behaviour>`
    getmsg(), yes :ref:`†<posix_undefined_behaviour>`
    getpmsg(), yes :ref:`†<posix_undefined_behaviour>`
    ioctl(), yes
    isastream(), yes :ref:`†<posix_undefined_behaviour>`
    putmsg(), yes :ref:`†<posix_undefined_behaviour>`
    putpmsg(), yes :ref:`†<posix_undefined_behaviour>`

.. _Subprofiling Considerations:
    https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_subprofiles.html
