Appendix: POSIX Conformance

This appendix describes how QNX Neutrino conforms to POSIX. It's based on the documentation submitted for the QNX Neutrino certification of compliance as a PSE52 Realtime Controller 1003.13-2003 System. This appendix includes:


Note:

To set up an environment that conforms to POSIX, do the following:

  • Specify the -m~b option to procnto in your buildfile, to make the kernel perform POSIX error checking for arguments to mapped file operations.
  • Set the POSIXLY_CORRECT environment variable to 1.
  • Explicitly configure the compiler for C99 compatibility. For example, with a gcc-4.2.1 compiler:
    qcc -V4.2.1,gcc_ntox86 -Wc,-std=c99
      

Conformance statement

This section is based on the Conformation Statement made for the certification and includes:

System interfaces: general attributes

Supported features

The required features below are supported for all system configurations.

Macro Name Meaning
_POSIX_NO_TRUNC Pathname components longer than NAME_MAX generate an error.

Optional features

QNX Neutrino doesn't implement the following optional features:

QNX Neutrino supports the following POSIX.1 options and POSIX.13 units of functionality not mandated by the PSE52 Realtime Controller 1003.13-2003 System Product Standard:

Float, standard I/O, and limit values

The values associated with the constants specified in <float.h> are as follows:

Macro Name Meaning Value
FLT_RADIX Radix of the exponent representation. 2
FLT_MANT_DIG Number of base-FLT_RADIX digits in the float significand. 24
DBL_MANT_DIG Number of base-FLT_RADIX digits in the double significand. 53
LDBL_MANT_DIG Number of base-FLT_RADIX digits in the long double significand. 64
FLT_DIG Number of decimal digits, q, such that any floating-point number with q digits can be rounded into a float representation and back again without change to the q digits. 6
DBL_DIG Number of decimal digits, q, such that any floating-point number with q digits can be rounded into a double representation and back again without change to the q digits. 15
LDBL_DIG Number of decimal digits, q, such that any floating-point number with q digits can be rounded into a long double representation and back again without change to the q digits. 18
FLT_MIN_EXP Minimum negative integer such that FLT_RADIX raised to that power minus 1 is a normalised float. -125
DBL_MIN_EXP Minimum negative integer such that FLT_RADIX raised to that power minus 1 is a normalised double. -1021
LDBL_MIN_EXP Minimum negative integer such that FLT_RADIX raised to that power minus 1 is a normalised long double. -16381
FLT_MIN_10_EXP Minimum negative integer such that 10 raised to that power is in the range of normalised floats. -37
DBL_MIN_10_EXP Minimum negative integer such that 10 raised to that power is in the range of normalised doubles. -307
LDBL_MIN_10_EXP Minimum negative integer such that 10 raised to that power is in the range of normalised long doubles. -4931
FLT_MAX_EXP Maximum integer such that FLT_RADIX raised to that power minus 1 is a representable finite float. 128
DBL_MAX_EXP Maximum integer such that FLT_RADIX raised to that power minus 1 is a representable finite double. 1024
LDBL_MAX_EXP Maximum integer such that FLT_RADIX raised to that power minus 1 is a representable finite long double. 16384
FLT_MAX_10_EXP Maximum integer such that 10 raised to that power is in the range of representable finite floats. 38
DBL_MAX_10_EXP Maximum integer such that 10 raised to that power is in the range of representable finite doubles. 308
LDBL_MAX_10_EXP Maximum integer such that 10 raised to that power is in the range of representable finite long doubles. 4932
FLT_MAX Maximum representable finite float. 3.40282347e+38
DBL_MAX Maximum representable finite double. 1.7976931348623157e308
LDBL_MAX Maximum representable finite long double. 1.189731495357231765e+4932
FLT_EPSILON Difference between 1.0 and the least value greater than 1.0 that is representable as a float. 1.1920929e-07
DBL_EPSILON Difference between 1.0 and the least value greater than 1.0 that is representable as a double. 2.2204460492503131e-16
LDBL_EPSILON Difference between 1.0 and the least value greater than 1.0 that is representable as a long double. 1.084202172485504434e-19
FLT_MIN Minimum normalised positive float. 1.17549435e-38
DBL_MIN Minimum normalised positive double. 2.2250738585072014e-308
LDBL_MIN Minimum normalised positive long double. 3.362103143112093506e-4932

The values associated with the following constants (optionally specified in <limits.h> are as follows:

Macro Name Meaning Minimum Maximum
DELAYTIMER_MAX Maximum number of timer expiration overruns. 1048576 1048576
FILESIZEBITS Minimum number of bits needed to represent as a signed integer value the maximum size of a regular file. 32 64
LINK_MAX Maximum number of links to a single file. 1 2147483647
MQ_OPEN_MAX The maximum number of open message queue descriptors a process may hold. 8 1024
MQ_PRIO_MAX The maximum number of message priorities supported by the implementation. 32 32
NAME_MAX Maximum number of bytes in a filename (not including the terminating null). 91 255
OPEN_MAX Maximum number of open files that one process can have open at any one time. 100 65534
PAGESIZE Size of a page in bytes. 4096 4096
PATH_MAX Maximum number of bytes in a pathname (including the terminating null). 255 1024
PTHREAD_DESTRUCTOR_ITERATIONS Maximum number of attempts made to destroy a thread's thread-specific data values when a thread exits. 4 4
PTHREAD_KEYS_MAX Maximum number of data keys that can be created by a process. 128 128
PTHREAD_STACK_MIN Minimum size in bytes of thread stack storage. 256 256
PTHREAD_THREADS_MAX Maximum number of threads that can be created per process. 65534 65534
RTSIG_MAX Maximum number of realtime signals reserved for application use in this implementation. 16 16
SEM_NSEMS_MAX Maximum number of semaphores that a process may have. Unlimited Unlimited
SEM_VALUE_MAX The maximum value a semaphore may have. 1073741823 1073741823
SIGQUEUE_MAX Maximum number of queued signals that a process may send and have pending at the receiver(s) at any time. Unlimited Unlimited
SS_REPL_MAX The maximum number of replenishment operations that may be simultaneously pending for a particular sporadic server scheduler. 65535 65535
STREAM_MAX Number of streams that one process can have open at one time. Unlimited Unlimited
TIMER_MAX Maximum number of timers per process supported by the implementation. 65534 65534
TRACE_EVENT_NAME_MAX Maximum length of the trace event name. Not supported Not supported
TRACE_NAME_MAX Maximum length of the trace generation version string or of the trace stream name. Not supported Not supported
TRACE_SYS_MAX Maximum number of trace streams that may simultaneously exist in the system. Not supported Not supported
TRACE_USER_EVENT_MAX Maximum number of user trace event type identifiers that may simultaneously exist in a traced process, including the predefined user trace event POSIX_TRACE_UNNAMED_USER_EVENT. Not supported Not supported
TZNAME_MAX Maximum number of bytes supported for the name of a time zone. 30 30

The values associated with the following numerical constants specified in the <limits.h> header file are as follows:

Macro Name Meaning Value
CHAR_MAX Maximum value of a char. 127
INT_MAX Maximum value of an int. 2147483647
LONG_MAX Maximum value of a long int. 2147483647
LLONG_MAX Maximum value of a long long. 9223372036854775807
SHRT_MAX Maximum value of a short. 32767
SSIZE_MAX Maximum value of an object of type ssize_t. 2147483647
UINT_MAX Maximum value of an unsigned int. 4294967295
ULONG_MAX Maximum value of an unsigned long int. 4294967295
ULLONG_MAX Maximum value of a unigsned long long. 18446744073709551615
USHRT_MAX Maximum value of an unsigned short int. 65535

The values associated with the numerical constants specified in the <stdio.h> header file are as follows:

Macro Name Meaning Value
FILENAME_MAX Maximum size in bytes of the longest filename string that the implementation guarantees can be opened. 255
FOPEN_MAX Number of streams which the implementation guarantees can be open simultaneously. 16
L_tmpnam Maximum size of character array to hold tmpnam() output. 255
TMP_MAX Minimum number of unique filenames generated by tmpnam(), which is the maximum number of times an application can call tmpnam() reliably. 17576

Error conditions

The following table indicates which optional errors, (denoted by “may fail” within the specification), listed in the System Interfaces Volume are detected in the circumstances specified:

Function Error Detected
access() EINVAL Yes
ENAMETOOLONG Yes
ETXTBSY No
chdir() ENAMETOOLONG Yes
ELOOP Yes
clock_settime() EPERM Yes
close() EIO Yes
closedir() EBADF Yes
EINTR Yes
erfc(), erfcf(), erfcl() Range Error Yes
exp(), expf(), expl() Range Error Yes
exp2(), exp2f(), exp2l() Range Error Yes
expm1(), expm1f() Range Error Yes
fchdir() EINTR Yes
EIO No
fclose() ENXIO No
fcntl() EDEADLK Yes
fdim(), fdimf(), fdiml() Range Error Yes
fdopen() EBADF No
EINVAL Yes
EMFILE No
ENOMEM Yes
fflush() ENXIO Yes
fgetc() ENOMEM No
ENXIO Yes
fgetpos() EBADF Yes
ESPIPE Yes
fgetwc() ENOMEM No
ENXIO Yes
fileno() EBADF No
fmod(), fmodf(), fmodl() Range Error Yes
fopen() EINVAL Yes
ELOOP Yes
EMFILE Yes
ENAMETOOLONG Yes
ENOMEN Yes
ETXTBSY Yes
fpathconf() EBADF Yes
EINVAL Yes
fputc() ENOMEM No
ENXIO Yes
fread() ENOMEM No
ENXIO Yes
freopen() EINVAL Yes
ELOOP Yes
ENAMETOOLONG Yes
ENOMEM Yes
ENXIO Yes
ETXTBSY Yes
fscanf() ENOMEM No
ENXIO Yes
fstat() EOVERFLOW Yes
ftell() ESPIPE Yes
getcwd() EACCES Yes
ENOMEM Yes
ldexp(), ldexpf(), ldexpl() Range Error Yes
link() ELOOP Yes
ENAMETOOLONG Yes
mkdir() ELOOP Yes
ENAMETOOLONG Yes
mktime() EOVERFLOW No
mlock() EINVAL Yes
ENOMEM Yes
munlock() EINVAL Yes
mlockall() ENOMEM Yes
ENOPERM Yes
mq_getattr() EBADF Yes
mq_receive() EBADF Yes
mq_timedreceive() EBADF Yes
open() EAGAIN No
EINVAL Yes
ELOOP Yes
ENAMETOOLONG Yes
ETXTBSY Yes
opendir() ELOOP Yes
EMFILE Yes
ENAMETOOLONG Yes
ENFILE Yes
pathconf() EACCES Yes
EINVAL Yes
ELOOP Yes
ENAMETOOLONG Yes
ENOENT Yes
ENOTDIR Yes
posix_trace_*() Not supported Not supported
pow(), powf(), powl() Range Error Yes
pthread_attr_destroy() EINVAL No
pthread_attr_init() EBUSY No
pthread_attr_getdetachstate() EINVAL No
pthread_attr_setdetachstate() EINVAL No
pthread_attr_getguardsize() EINVAL No
pthread_attr_setguardsize() EINVAL No
pthread_attr_getinheritsched() EINVAL No
pthread_attr_setinheritsched() EINVAL No
ENOSUP No
pthread_attr_getschedparam() EINVAL No
pthread_attr_setschedparam() EINVAL No
ENOSUP No
pthread_attr_getschedpolicy() EINVAL No
pthread_attr_setschedpolicy() EINVAL No
ENOSUP No
pthread_attr_getscope() EINVAL No
pthread_attr_setscope() EINVAL Yes
ENOSUP Yes
pthread_attr_getstack() EINVAL No
pthread_attr_setstack() EINVAL No
EBUSY No
pthread_attr_getstackaddr() EINVAL No
pthread_attr_setstackaddr() EINVAL No
pthread_attr_getstacksize() EINVAL No
pthread_attr_setstacksize() EINVAL No
pthread_cancel() ESRCH Yes
pthread_cond_broadcast() EINVAL Yes
pthread_cond_signal() EINVAL Yes
pthread_cond_destroy() EBUSY Yes
EINVAL Yes
pthread_cond_init() EBUSY Yes
EINVAL Yes
pthread_cond_timedwait() EINVAL Yes
EPERM Yes
pthread_cond_wait() EINVAL Yes
EPERM Yes
pthread_condattr_destroy() EINVAL No
pthread_condattr_getclock() EINVAL No
pthread_condattr_setclock() EINVAL No
pthread_condattr_getpshared() EINVAL No
pthread_condattr_setpshared() EINVAL No
pthread_create() EINVAL Yes
pthread_detach() EINVAL Yes
ESRCH Yes
pthread_getcpuclockid() ESRCH Yes
pthread_getschedparam() ESRCH Yes
pthread_setschedparam() EINVAL Yes
ENOTSUP Yes
EPERM Yes
ESRCH Yes
pthread_setspecific() ESRCH No
pthread_join() EDEADLK Yes
EINVAL Yes
pthread_key_delete() EINVAL Yes
pthread_mutex_destroy() EBUSY Yes
EINVAL Yes
pthread_mutex_init() EBUSY Yes
EINVAL Yes
pthread_mutex_lock() EINVAL Yes
EDEADLK Yes
pthread_mutex_trylock() EINVAL Yes
pthread_mutex_unlock() EINVAL Yes
EPERM Yes
pthread_mutex_timedlock() EINVAL Yes
EDEADLK Yes
pthread_mutexattr_destroy() EINVAL No
pthread_mutexattr_getprioceiling() EINVAL No
EPERM No
pthread_mutexattr_setprioceiling() EINVAL Yes
EPERM No
pthread_mutexattr_getprotocol() EINVAL No
EPERM No
pthread_mutexattr_setprotocol() EINVAL Yes
EPERM No
pthread_mutexattr_getpshared() EINVAL No
pthread_mutexattr_setpshared() EINVAL No
pthread_mutexattr_gettype() EINVAL No
pthread_mutexattr_settype() EINVAL Yes
pthread_once() EINVAL No
pthread_setcancelstate() EINVAL Yes
pthread_setcanceltype() EINVAL Yes
pthread_schedprio() EINVAL Yes
ENOTSUP No
EPERM Yes
ESRCH Yes
putc() ENOMEM No
ENXIO Yes
putchar() ENOMEM No
ENXIO Yes
puts() ENOMEM No
ENXIO Yes
read() EIO Yes
ENOBUFS Yes
ENOMEM Yes
ENXIO Yes
readdir() EBADF Yes
ENOENT No
remove() EBUSY No
ELOOP Yes
ENAMETOOLONG Yes
ETXTBSY No
rename() ELOOP Yes
ENAMETOOLONG Yes
ETXTBSY No
rmdir() ELOOP Yes
ENAMETOOLONG Yes
sem_close() EINVAL Yes
sem_destroy() EINVAL Yes
EBUSY Yes
sem_getvalue() EINVAL Yes
sem_post() EINVAL Yes
sem_timedwait() EDEADLK No
EINTR Yes
EINVAL Yes
sem_trywait() EDEADLK No
EINTR Yes
EINVAL Yes
sem_wait() EDEADLK No
EINTR Yes
EINVAL Yes
setvbuf() EBADF No
sigaction() EINVAL Yes
sigaddset() EINVAL Yes
sigdelset() EINVAL Yes
sigismember() EINVAL Yes
signal() EINVAL Yes
sigtimedwait() EINVAL Yes
sigwait() EINVAL No
sigwaitinfo() EINVAL No
stat() ELOOP Yes
ENAMETOOLONG Yes
EOVERFLOW Yes
strcoll() EINVAL No
strerror() EINVAL No
strerror_r() ERANGE Yes
strtod(), strtof(), strtold() EINVAL Yes
strtoimax() EINVAL Yes
strtol() EINVAL Yes
strtoul() EINVAL Yes
strtoumax() EINVAL Yes
strxfrm() EINVAL No
timer_delete() EINVAL Yes
timer_getoverrun() EINVAL Yes
timer_gettime() EINVAL Yes
timer_settime() EINVAL Yes
tmpfile() EMFILE Yes
ENOMEM Yes
unlink() ELOOP Yes
ENAMETOOLONG Yes
ETXTBSY No
utime() ELOOP Yes
ENAMETOOLONG Yes
vfscanf() EILSEQ Yes
EINVAL No
ENOMEM No
ENXIO Yes
write() ENETDOWN Yes
ENETUNREACH Yes
ENXIO Yes

Mathematical interfaces

Most implementations support IEEE floating-point format either in hardware or software. Some implementations support other formats with different exponent and mantissa accuracy. QNX Neutrino supports IEEE 754 in hardware.

The fegetexceptflag(), feraiseexcept(), fesetexecptflag(), and fetestexecptflag() functions support the following floating-point exceptions:

The fegetround() and fesetround() functions support the following floating-point rounding directions:

QNX Neutrino supports a non-stop floating-point exception mode.

File handling

Access control

QNX Neutrino provides standard access control.

Files and directories

QNX Neutrino doesn't implement any additional or alternate file access control mechanisms that could cause fstat() or stat() to fail.

Internationalized system interfaces

Coded character sets

QNX Neutrino supports the following coded character sets:

The underlying internal codeset is ISO 8859-1:1987.

Threads

Cancellation points

The POSIX functions listed below have cancellation points that occur when a thread is executing:

closedir()
closelog()
dlopen()
endgrent()
endhostent()
endnetent()
endprotoent()
endpwent()
endservent()
fclose()
fflush()
fgetc()
fgetpos()
fgets()
fgetwc()
fgetws()
fopen()
fprintf()
fputc()
fputwc()
fputws()
fread()
freopen()
fscanf()
fseek()
fseeko()
fsetpos()
ftell()
ftello()
ftw()
fwprintf()
fwrite()
fwscanf()
getc()
getc_unlocked()
getchar()
getchar_unlocked()
getgrent()
getgrgid()
getgrgid_r()
getgrnam()
getgrnam_r()
getlogin()
getlogin_r()
getnetbyaddr()
getnetbyname()
getnetent()
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwent_r()
getpwnam()
getpwnam_r()
getpwuid()
getpwuid_r()
gets()
getservbyname()
getservbyport()
getservent()
getwc()
getwchar()
getwd()
glob()
ioctl()
lseek()
mkstemp()
nftw()
opendir()
openlog()
pathconf()
pclose()
perror()
popen()
posix_fadvise()
posix_fallocate()
posix_openpt()
posix_spawn()
posix_spawnp()
printf()
pthread_rwlock_rdlock()
pthread_rwlock_timedrdlock()
pthread_rwlock_timedwrlock()
pthread_rwlock_wrlock()
putc()
putc_unlocked()
putchar()
putchar_unlocked()
puts()
putwc()
putwchar()
readdir()
readdir_r()
rewind()
scanf()
seekdir()
setgrent()
sethostent()
setnetent()
setprotoent()
setpwent()
setservent()
syslog()
tmpfile()
vfprintf()
vfwprintf()
vprintf()
vwprintf()
wscanf()

For a list of all the functions (including non-POSIX ones) that are cancellation points, see the Summary of Safety Information appendix in the QNX Neutrino Library Reference.

Realtime

Prioritized I/O

QNX Neutrino supports _POSIX_PRIORITIZED_IO on regular files.

Realtime threads

Scheduling policies

The scheduling policy associated with SCHED_OTHER is SCHED_RR.

Scheduling contention scope

QNX Neutrino supports the PTHREAD_SCOPE_SYSTEM scheduling contention scope.

Default scheduling contention scope

The default scheduling contention scope is PTHREAD_SCOPE_SYSTEM.

Scheduling allocation domain

The mechanism to configure the system so that the scheduling allocation domain has size one, so that the binding of threads to scheduling allocation domains remains static is as follows:

C-language compilation environment

QNX Neutrino provides the following C-language compilation environments:

QNX Neutrino doesn't provide the following C-language compilation environments:

The Base Definitions Volume defines these four scenarios as possible C-language compilation environment offerings, but doesn't define which corresponding execution environments are supported. QNX Neutrino supports the same execution environments as it does compilation environments.

The largest type that can be stored in type off_t is long long The standard requires that off_t be able to store any value contained in type long.

POSIX Conformance Document (PCD)

This section describes the behavior of the implementation-defined features described in IEEE 1003.1-2004 as implemented by the QNX Neutrino RTOS 6.4 operating system for the PSE52 profile specified by IEEE 1003.13-2003. The section numbers and titles below are those from the standard itself.

Base Definitions

3. Definitions

3.4. Additional File Access Control Mechanism

No additional file access control mechanisms are implemented.

3.12. Alternate File Access Control Mechanism

No alternative file access control mechanisms are implemented.

3.19. Appropriate Privileges

Appropriate privileges are provided by executing with a user ID equal to 0 (root).

3.97. Clock Tick

For CPU targets operating at less than 40 MHz, the default is 100 clock ticks per second.

For CPU targets operating at greater than 40 MHz, the default is 1000 clock ticks per second.

You can set the system clock's resolution by using the QNX-specific ClockPeriod() kernel call using the CLOCK_REALTIME clock.

3.159. Extended Security Controls

Extended security controls aren't implemented.

3.387. System Trace Event

The Trace (TRC) option isn't supported.

3.409. Trace Generation Version

The Trace (TRC) option isn't supported.

4. General Concepts

4.3. Extended Security Controls

No extended security controls are implemented.

4.9. Measurement of Execution Time

Process and thread execution time is measured by updating the running time on each clock tick. The running time of the active thread and process on each processor is incremented by the duration of the system clock tick.

The CPU time consumed by interrupt handlers is charged to the thread and process that is currently active on the CPU.

The CPU time consumed by kernel calls is charged to the thread and process performing the kernel call.

The CPU time consumed by system services not implemented by the kernel is charged to the thread in the server process that implements the system service.

4.11. Pathname Resolution

A pathname that begins with two successive slashes is treated as if it begins with a single slash.

4.14. Seconds Since the Epoch

The value of seconds since the Epoch is aligned with the current actual time by a 64-bit offset value that represents the offset, in nanoseconds, from the Epoch to the system boot time.

This offset value is initialised by the platform specific initialisation code within the board support package, for example, by reading RTC hardware if present.

A clock_settime() call using the CLOCK_REALTIME clock will set this offset to specified absolute time minus the current monotonic time since booting.

The offset from the Epoch can also be modified by the QNX specific ClockAdjust() kernel call. This applies a delta to the offset value on each system clock tick, for a specified number of ticks to perform a gradual adjustment of the offset value.

4.17. Tracing

The Trace (TRC) option isn't implemented.

4.18. Treatment of Error Conditions for Mathematical Functions

4.18.1 Domain Error
The return value for a domain error is NaN.
4.18.3 Range Error

6. Character Set

6.4. Character Set Description File

Applications can provide additional character set description files.

For single byte characters, the decimal, octal or hexadecimal constants are represented as a char value.

For multibyte characters, the decimal, octal or hexadecimal constants are represented as a wchar_t value, whose type is an unsigned 32-bit integer.

7. Locale

7.1. General

When the value of a locale environment variable doesn't begin with a slash, the value is interpreted as the name of a locale with the set of currently defined locales:

7.2. POSIX Locale

The default locale is the POSIX locale.

7.3. Locale Definition

No additional locale categories beyond those specified are supported.

The values of the characters in the portable character set are those defined by the ASCII and ISO/IEC 8859-1 character sets.

8. Environment Variables

8.2. Internationalization Variables

There are no additional semantics for the following environment variables:

The default locale is the POSIX locale.

There are no additional criteria for determining valid locales.

8.3. Other Environment Variables

When the first character of the TZ variable is a colon, the colon is ignored and the following characters are handled as a normal time zone specification. For more information, see Setting the time zone in the Configuring Your Environment chapter of the QNX Neutrino User's Guide.

13. Headers

<fenv.h>

The default state of the FENV_ACCESS pragma is off. Note that gcc doesn't currently support this pragma.

<float.h>

The accuracy of of floating point operations and the library functions in <math.h> and <complex.h> is unknown.

The default rounding mode for floating-point addition (FLT_ROUNDS) is 1. No additional values beyond those specified are implemented.

The evaluation format mode (FLT_EVAL_METHOD) is -1 (indeterminable). There are no additional implementation-defined values beyond those specified.

The values of floating-point constants are as follows:

Constant Value
FLT_RADIX 2
FLT_MANT_DIG 24
DBL_MANT_DIG 53
LDBL_MANT_DIG 64
DECIMAL_DIG 21
FLT_DIG 6
DBL_DIG 15
LDBL_DIG 18
FLT_MIN_EXP -125
DBL_MIN_EXP -1021
LDBL_MIN_EXP -16381
FLT_MIN_10_EXP -37
DBL_MIN_10_EXP -307
LDBL_MIN_10_EXP -4931
FLT_MAX_EXP 128
DBL_MAX_EXP 1024
LDBL_MAX_EXP 16384
FLT_MAX_10_EXP 38
DBL_MAX_10_EXP 308
LDBL_MAX_10_EXP 4932
FLT_MAX 3.40282347e+38
DBL_MAX 1.7976931348623157e308
LDBL_MAX 1.189731495357231765e+4932
FLT_EPSILON 1.1920929e-07
DBL_EPSILON 2.2204460492503131e-16
LDBL_EPSILON 1.084202172485504434e-19
FLT_MIN 1.17549435e-38
DBL_MIN 2.2250738585072014e-308
LDBL_MIN 3.362103143112093506e-4932

<limits.h>

The limit values in <limits.h> are implemented as follows:

Limit Value
AIO_LISTIO_MAX Indeterminate
AIO_MAX Indeterminate
AIO_PRIO_DELTA_MAX Indeterminate
ARG_MAX 61440
ATEXIT_MAX 32
CHILD_MAX Indeterminate
DELAYTIMER_MAX 1048576
HOST_NAME_MAX Indeterminate
IOV_MAX Indeterminate
LOGIN_NAME_MAX Indeterminate
MQ_OPEN_MAX Determined by the mqueue or mq server.

The maximum value is set to 1024, but a lower limit may be imposed by the process RLIMIT_NOFILE limit, as the implementation is via file descriptors.

MQ_PRIO_MAX 32
OPEN_MAX Determined by the maximum number of file descriptors available to a process.

The default limit is 1000, but this can be altered using a configuration option to the kernel when building the system image.

The minimum value that can be supplied is 100, with no imposed maximum.

A lower limit may be imposed by the process RLIMIT_NOFILE limit.

PAGESIZE 4096
PAGE_SIZE 4096
PTHREAD_DESTRUCTOR_ITERATIONS 4
PTHREAD_KEYS_MAX 128
PTHREAD_STACK_MIN 256
PTHREAD_THREADS_MAX 32767
RE_DUP_MAX 255
RTSIG_MAX 16
SEM_NSEMS_MAX For unnamed semaphores, this is indeterminate.

For named semaphores, the limit is determined by the mqueue server. The maximum is set to 4096, but a lower limit may be imposed by the process RLIMIT_NOFILE limit, as the implementation is via file descriptors.

SEM_VALUE_MAX 1073741824
SIGQUEUE_MAX Indeterminate
SS_REPL_MAX 65535
STREAM_MAX Indeterminate
SYMLOOP_MAX Indeterminate
TIMER_MAX Indeterminate
TTY_NAME_NAME Indeterminate
TZNAME_MAX 30
FILESIZEBITS Depends on the filesystem implementation.

The value for all currently supported filesystems is 32.

LINK_MAX 65535
MAX_CANON Depends on the character device driver.

The default is 256, but may be changed by the -C driver command-line option.

MAX_INPUT Depends on the character device driver.

The default is 256, but may be changed by the -C driver command-line option.

NAME_MAX Depends on the filesystem implementation.

Most filesystems impose a limit of 255; the ETFS filesystem imposes a limit of 91.

PATH_MAX Depends on the filesystem implementation.

Most filesystems impose a limit of 1024; the ETFS filesystem imposes a limit of 255.

PIPE_BUF 512
SYMLINK_MAX Depends on the filesystem implementation.

Most filesystems impose a limit of 1024; the ETFS filesystem imposes a limit of 256.

BC_BASE_MAX 99
BC_DIM_MAX 2048
BC_SCALE_MAX 99
BC_STRING_MAX 1000
CHARCLASS_NAME_MAX 14
COLL_WEIGHTS_MAX 2
EXPR_NEST_MAX 32
LINE_MAX 2048
NGROUPS_MAX 8
RE_DUP_MAX 255
CHAR_BIT 8
CHAR_MAX 127
CHAR_MIN -128
INT_MAX 2147483647
LONG_BIT 32
LONG_MAX 2147483647
MB_LEN_MAX 8
SCHAR_MAX 127
SHRT_MAX 32767
SSIZE_MAX 2147483647
UCHAR_MAX 255
UINT_MAX 4294967295
ULONG_MAX 4294967295
USHRT_MAX 65535
WORD_BIT 32
INT_MIN -2147383648
LONG_MIN -2147383648
SCHAR_MIN -128
SHRT_MIN -32768
LLONG_MIN -9223372036854775808
LLONG_MAX 9223372036854775807
ULLONG_MAX 18446744073709551615

<math.h>

If FLT_EVAL_METHOD has a value other than 0, 1 or 2, the type definitions for float_t and double_t are float and double, respectively.

No implementation-defined floating-point classification macros are defined.

The default state of the FP_CONTRACT pragma is off. Note that gcc doesn't currently support this pragma.

<signal.h>

Realtime signal behavior is supported for signals outside of the range SIGRTMIN through SIGRTMAX.

The following additional signals are defined in <signal.h>:

For more information, see Summary of signals in the Interprocess Communication (IPC) chapter of the System Architecture guide.

<stdint.h>

The limits for specified-width integer types are as follows:

INT8_MIN -128
INT16_MIN -32768
INT32_MIN -2147483648
INT64_MIN -9223372036854775808
INT8_MAX 127
INT16_MAX 32767
INT32_MAX 2147483647
INT64_MAX 9223372036854775807
UINT8_MAX 255
UINT16_MAX 65535
UINT32_MAX 4294967295
UINT64_MAX 18446744073709551615
INT_LEAST8_MIN -128
INT_LEAST16_MIN -32768
INT_LEAST32_MIN -2147483648
INT_LEAST64_MIN -9223372036854775808
INT_LEAST8_MAX 127
INT_LEAST16_MAX 32767
INT_LEAST32_MAX 2147483647
INT_LEAST64_MAX 9223372036854775807
UINT_LEAST8_MAX 255
UINT_LEAST16_MAX 65535
UINT_LEAST32_MAX 4294967295
UINT_LEAST64_MAX 18446744073709551615
INT_FAST8_MIN -128
INT_FAST16_MIN -32768
INT_FAST32_MIN -2147483648
INT_FAST64_MIN -9223372036854775808
INT_FAST8_MAX 127
INT_FAST16_MAX 32767
INT_FAST32_MAX 2147483647
INT_FAST64_MAX 9223372036854775807
UINT_FAST8_MAX 255
UINT_FAST16_MAX 65536
UINT_FAST32_MAX 4294967295
UINT_FAST64_MAX 18446744073709551615
INTPTR_MIN -2147483648
INTPTR_MAX 2147483647
UINTPTR_MAX 4284967295

The values of other integer types are as follows:

PTRDIFF_MIN -2147483648
PTRDIFF_MAX 2147483647
SIG_ATOMIC_MIN -2147483648
SIG_ATOMIC_MAX 2147483647
SIZE_MAX 4284967295

<sys/stat.h>

There are no additional implementation-defined bits that can be ORed into S_IRWXU, S_IRWXG, and S_IRWXO.

<time.h>

The maximum possible clock jump for the system-wide monotonic clock is the same as the system clock resolution:

The system clock resolution can be set using the QNX-specific ClockPeriod() kernel call using the CLOCK_REALTIME clock.

System Interfaces

2.3. Error Numbers

The <errno.h> header file defines the following additional error numbers:

Number Meaning
EADV Advertise error
EBADE Invalid exchange
EBADFD FD invalid for this operation
EBADR Invalid request descriptor
EBADRPC RPC struct is bad
EBADRQC Invalid request code
EBADSLT Invalid slot
EBADFSYS Corrupted filesystem detected
EBFONT Bad font file
ECHRNG Channel number out of range
ECOMM Communication error on send
ECTRLTERM Remap to the controlling terminal
EDEADLOCK File locking deadlock
EENDIAN Endian not supported
EFPOS File position error
EHOSTDOWN Host is down
EL2HLT Level 2 halted
EL2NSYNC Level 2 not synchronized
EL3HLT Level 3 halted
EL3RST Level 3 reset
ELIBACC Can't access shared library
ELIBBAD Accessing a corrupted shared library
ELIBEXEC Attempting to exec a shared library
ELIBMAX Attempting to link too many libraries
ELIBSCN .lib section in a.out corrupted
ELNRNG Link number out of range
EMORE More to do, send message again
ENOANO No anode
ENOCSI No CSI structure available
ENOLIC No license
ENONDP Need an NDP to run
ENONET Machine isn't on the network
ENOPKG Package not installed
ENOREMOTE Must be done on local machine
ENOTBLK Block device required
ENOTUNIQ Given name not unique
EOK No error
EPFNOSUPPORT Protocol family not supported
EPROCUNAVAIL Bad procedure call for program
EPROGMISMATCH Program version wrong
EPROGUNAVAIL RPC prog. not avail
EREMCHG Remote address changed
EREMOTE Object is remote
ERESTART Restartable system call
ERPCMISMATCH RPC version wrong
ESHUTDOWN Can't send after socket shutdown
ESOCKTNOSUPPORT Socket type not supported
ESRMNT Srmount error
ESRVRFAULT Server fault on message pass
ESTRPIPE if pipe/FIF, don't sleep in stream head"
ETOOMANYREFS Too many references: can't splice
EUNATCH Protocol driver not attached
EUSERS Too many users
EXFULL Exchange full

See also errno in the QNX Neutrino Library Reference.

2.4. Signal Concepts

If a subsequent occurrence of a pending signal is generated, the signal is delivered or accepted more than once if a handler has been set for the signal with SA_SIGINFO set.

A SIGBUS signal may be generated for a misaligned memory access:

2.4.2. Realtime Signal Generation and Delivery

The signal mask for a thread created to invoke the sigev_notify_function function (see sigevent) inherits the signal mask of the thread to which the signal is delivered.

2.4.3. Signal Actions

For SIGILL signals generated by the execution of an illegal instruction, the si_code field may contain one of the following:

ILL_ILLOPC Illegal opcode is executed
ILL_PRVOPC Instruction requires privileged CPU mode
ILL_COPROC Co-processor instruction error

For SIGSEGV signals generated by an invalid memory access, the si_code field may contain one of the following:

SEGV_MAPERR The address isn't mapped
SEGV_ACCERR The mapping doesn't allow the attempted access

For SIGBUS signals generated by an invalid memory access, the si_code field may contain one of the following:

BUS_ADRALN Invalid address alignment
BUS_OBJERR Access to a non-existent area of a memory object
BUS_OBJERR Hardware-specific bus error

For SIGTRAP signals generated by breakpoint or other debug traps, the si_code field may contain one of the following:

TRAP_BRKPT Breakpoint trap
TRAP_TRACE Trace trap

For SIGCLD signals generated during process termination or job control related events, the si_code field may contain one of the following:

CLD_EXITED Process has exited
CLD_KILLED Process was killed
CLD_DUMPED Process terminated abnormally
CLD_STOPPED Process has been stopped
CLD_CONTINUED A stopped process has been continued

For SIGFPE signals generated for floating-point exceptions, the si_code field may contain one of the following:

FPE_INTDIV Integer division by zero
FPE_INTOVF Floating point overflow
FPE_FLTDIV Floating point division by zero
FPE_FLTUND Floating point underflow
FPE_FLTRES Floating point inexact result
FPE_FLTINV Invalid floating point operation
FPE_NOFPU No floating point hardware or software emulator present
FPE_NOMEM No memory for floating point context save area

2.5. Standard I/O Streams

When a file is opened with append mode, the file position indicator is initially positioned at the beginning of the file.

The characteristics of unbuffered and fully buffered streams are supported.

Fully buffered streams use all bytes in the allocated buffer.

Line buffered streams are supported for all file types.

2.5.1. Interaction of File Descriptors and Standard I/O Streams

Input is seen exactly once provided the application follows the rules specified.

2.8. Realtime

2.8.3. Memory Management

Memory locking guarantees fixed translation between virtual addresses (as seen by the process) and physical addresses.

2.8.4. Processing Scheduling

No scheduling policies beyond those specified are implemented.

The resolution of the execution time clock for the SCHED_SPORADIC policy is the same as the system clock resolution:

The system clock resolution can be set using the QNX-specific ClockPeriod() kernel call using the CLOCK_REALTIME clock.

The SCHED_OTHER policy behaves identically to the SCHED_RR policy.

2.8.5. Clocks and Timers

The maximum possible clock jump for the system-wide monotonic clock is the same as the system clock resolution:

The system clock resolution can be set using the QNX-specific ClockPeriod() kernel call using the CLOCK_REALTIME clock.

The resolution for time services based on a supported clock is the same as the resolution of that clock.

2.9.4. Thread Scheduling

The default scheduling contention scope is PTHREAD_SCOPE_SYSTEM.

The PTHREAD_SCOPE_PROCESS contention scope isn't supported.

The default value of the inheritsched attribute is PTHREAD_INHERIT_SCHED. This means the default schedpolicy and schedparam attributes are inherited from the parent thread.

The PTHREAD_SCOPE_PROCESS scheduling contention scope isn't supported.

The system determines the scheduling allocation domain size on a per-thread basis using the concept of a “runmask” that indicates the processors on which the thread can be scheduled.

The default runmask for a thread is set to allow scheduling on all processors.

You can set a thread's runmask in the following ways:

For threads with scheduling allocation domains of size greater than one, the rules defined for SCHED_FIFO, SCHED_RR, and SCHED_SPORADIC are followed such that if the thread becomes the head of its thread list, the thread may become the runnable thread on any processor in its scheduling allocation domain if it has a higher priority than the running thread on one of those processors.

This may in turn result in the preempted thread's becoming the running thread on a different processor if that thread also has a scheduling allocation domain of size greater than one and its priority is higher than the running thread on one of the other processors in its scheduling allocation domain.

If a thread's scheduling allocation domain has a size greater than one, a runnable thread selects the processor on which it becomes the runnable thread as follows:

  1. For each processor in the thread's scheduling allocation domain, find the processor whose running thread has the lowest priority that is less than this thread.
  2. If the search identifies only one processor, select that processor and make the thread the running thread on that processor.
  3. If the search identifies more than one processor, select the processor on which the thread previously ran before becoming a blocked thread.
  4. If the thread hadn't run on any of the selected processors before becoming a blocked thread, select the first processor that was found in the search.

For more information, see the Multicore Processing User's Guide.

No scheduling policies beyond SCHED_OTHER, SCHED_FIFO, SCHED_RR and SCHED_SPORADIC are implemented.

2.11. Tracing

The Trace (TRC) option isn't supported.

3. System Interfaces

acos(), acosf(), and acosl()

For finite values not in the range [-1,1], acos(), acosf(), and acosl() return NaN. The return value for +/-Inf is NaN.

acosh(), acoshf(), acoshl()

For finite values of x < 1, acosh(), acoshf(), and acoshl() return NaN. The return value when x is -Inf is NaN.

asin(), asinf(), asinl()

For finite values not in the range [-1,1], asin(), asinf(), and asinl() return NaN. The return value for +/-Inf is NaN.

atan(), atanf(), atanhl()

For finite values of |x| > 1, atan(), atanf(), and atanhl() return NaN. The return value for +/-Inf is NaN.

calloc()

The calloc() function returns a unique pointer when the size of space requested is zero.

clock_getres(), clock_settime()

The resolution of all clocks, as returned by clock_getres(), is the same as the system clock resolution:

The system clock resolution can be set using the QNX-specific ClockPeriod() kernel call using the CLOCK_REALTIME clock.

The clock_settime() function is supported only for the CLOCK_REALTIME clock.

Appropriate privileges for setting the CLOCK_REALTIME clock are obtained by executing with a user ID equal to 0.

cos(), cosf(), cosl()

When x is +/-Inf, cos(), cosf(), and cosl() return NaN.

erfc(), erfcf(), erfcl()

For a correct value that would cause an underflow, erfc(), erfcf(), and erfcl() return 0.0.

exp(), expf(), expl()

For a correct value that would cause an underflow, exp(), expf(), and expl() return 0.0.

exp2(), exp2f(), exp2l()

For a correct value that would cause an underflow, exp2(), exp2f(), and exp2l() return 0.0.

fclose()

The fclose() may give an EIO error under the following circumstances:

fcntl()

The following addition values for the cmd argument to fcntl() are defined:

F_ALLOCSP Allocate storage space for the section of the file specified by the l_start, l_len, and l_whence fields of a struct flock structure pointed to by the argument to fcntl().
F_FREESP Free storage space for the section of the file specified by the l_start, l_len, and l_whence fields of a struct flock structure pointed to by the argument to fcntl().
F_ALLOCSP64 Same as F_ALLOCSP, except that the argument is a pointer to a struct flock64 structure, where the l_start and l_len fields are 64-bit values.
F_FREESP64 Same as F_FREESP, except that the argument is a pointer to a struct flock64 structure, where the l_start and l_len fields are 64-bit values.
F_GETLK64 Same as F_GETLK, except that the argument is a pointer to a struct flock64 structure, where the l_start and l_len fields are 64-bit values.
F_SETLK64 Same as F_SETLK, except that the argument is a pointer to a struct flock64 structure, where the l_start and l_len fields are 64-bit values.
F_SETLKW64 Same as F_GETLKW, except that the argument is a pointer to a struct flock64 structure, where the l_start and l_len fields are 64-bit values.

fdim(), fdimf(), fdiml()

When xy is positive and underflows, fdim(), fdimf(), and fdiml() return 0.0.

fegetexceptflag()

The representation of the floating-point status flags used by fegetexceptflag() depends on the CPU architecture. For x86 processors, the following values are used:

Value Meaning
0x01 Invalid operation exception
0x02 Denormalization exception
0x04 Division-by-zero exception
0x08 Overflow exception
0x10 Underflow exception
0x20 Inexact exception

feraiseexcept()

The feraiseexcept() function doesn't raise the inexact floating-point exception whenever it raises the overflow or underflow floating point exception.

fflush()

The fflush() may return an EIO error under the following circumstances:

fgetc()

The fgetc() function may return an EIO error if the filesystem resides on a removable media device, and the media has been forcibly removed.

fma(), fmaf(), fmal()

When x multiplied by y is an exact infinity, and z is also an infinity with the opposite sign, fma(), fmaf(), and fmal() return NaN.

The return value when one of x and y is infinite, the other is zero, and z isn't a NaN is NaN.

fmod(), fmodf(), fmodl()

For a correct value that would cause an underflow, fmod(), fmodf(), and fmodl() return 0.0. The return value when y is zero is NaN. The return value when x is infinite is NaN.

fpclassify()

There are no additional classification categories for the fpclassify() function, other than NaN, infinite, normal, subnormal and zero.

fprintf()

For the fprintf() function, the low-order digit rounding for numbers in double format is round-to-nearest.

For double arguments, the styles for representing infinity and NaN are as follows:

Value Format conversion specifier Representation
Infinity f [-]inf
Infinity F [-]INF
NaN f [-]nan
NaN F [-]NAN

The value of a pointer for the p conversion specifier is converted to a sequence of hexadecimal digits. The sequence is padded with leading zeroes if the 0 flag is specified.

fputc()

The fputc() function may return an EIO error if the filesystem resides on a removable media device, and the media has been forcibly removed.

freopen()

The following mode changes are permitted for freopen():

fscanf()

A - in the scanlist for fscanf() that isn't the first character, nor the second where the first character is a ^, nor the last character, defines a range of characters to be matched. This range consists of characters numerically greater than or equal to the character before the -, and numerically less than or equal to the character after the -.

The p conversion specifier matches a sequence of hexadecimal digits. If the sequence contains more than 8 digits, the conversion is performed only on the last 8 digits in the sequence.

fseeko()

The fseeko() function returns EOF on devices that are incapable of seeking. It sets errno to either ESPIPE or ENOSYS, depending on the implementation of the device or filesystem.

An EIO error may be returned if the filesystem resides on a removable media device, and the media has been forcibly removed.

fsetpos()

The fsetpos() function returns EOF on devices that are incapable of seeking. It sets errno to either ESPIPE or ENOSYS, depending on the implementation of the device or filesystem.

An EIO error may be returned if the filesystem resides on a removable media device, and the media has been forcibly removed.

fstat()

No additional or alternative file access control mechanisms are provided for the fstat() function.

fsync()

The fsync() function causes all buffered data for the file to be written to the storage device; the file modification times are updated.

kill()

No extended security controls are provided for the kill() function.

ldexp(), ldexpf(), ldexpl()

For a correct value that would cause an underflow, ldexp(), ldexpf(), and ldexpl() return 0.0.

log(), logf(), logl()

For finite values of x less than zero, log(), logf(), and logl() return NaN. The return value when x is -Inf is NaN.

log10(), log10f(), log10l()

For finite values of x less than zero, log10(), log10f(), and log10l() return NaN. The return value when x is -Inf is NaN.

log1p(), log1pf(), log1pl()

For finite values of x less than -1, log1p(), log1pf(), and log1pl() return NaN. The return value when x is -Inf is NaN.

log2(), log2f(), log2l()

For finite values of x less than 0, log2(), log2f(), and log2l() return NaN. The return value when x is -Inf is NaN.

lseek()

The lseek() function returns -1 on devices that are incapable of seeking. It sets errno to either ESPIPE or ENOSYS, depending on the implementation of the device or filesystem.

malloc()

The malloc() function returns a unique pointer when the size of space requested is zero.

mkdir()

In the mkdir() function, the following bits, in addition to file permission bits, behave as follows:

S_ISGID
Files and directories created within this directory have the group ID of this directory instead of the group ID of the process creating the file or directory.
S_ISVTX
Files can be removed or renamed only if one or more of the following is true:

mlock()

There's no limit on the amount of memory that a process may lock by calling mlock(), other than the amount of physical memory in the system.

mlockall(), munlockall()

Locking implied by MCL_FUTURE in a call to mlockall() or munlockall() is performed during an mmap() operation. If this exceeds the amount of available physical memory, that mmap() call fails with an ENOMEM error.

There is no limit on the amount of memory that a process may lock other than the amount of physical memory in the system.

mmap()

The return value for a successful mmap() call is a pointer whose value is a valid address in the process virtual address space. This establishes translations from the virtual address range to the physical memory addresses corresponding to the specified section of the memory object.

The return value for an unsuccessful mmap() call is MAP_FAILED, whose value is ((void *) -1).

The implementation supports MAP_FIXED.

When MAP_FIXED isn't set, addr is used as a hint to derive the virtual address returned:

There are no limits on the number of memory regions that can be mapped other than the limit imposed on the process's virtual address space.

mq_open()

When the name argument doesn't begin with a slash, mq_open() creates or opens a message queue with the specified name relative to the current working directory of the calling process. This name appears in the file system and is visible to other functions that take pathnames as arguments.

When the name begins with a slash, the message queue name isn't visible in the filesystem.

Additional slash characters other than the leading slash simply form the name used to identify the message queue:

Any bits other file permission bits in the mode argument are ignored.

When mq_open() is called with mq_attr set to NULL, the default message queue attributes are set as follows:

mq_maxmsg 1024
mq_msgsize 4096

mq_receive()

If the value of msg_len passed to mq_receive() is greater than SSIZE_MAX, the message is stored in the supplied buffer, and the length of the selected message is returned.

mq_setattr()

The mq_setattr() function doesn't OR any implementation-defined flags with O_NONBLOCK for the mq_flags member.

open()

The O_TRUNC flag for open() has no effect on file types other than regular files.

posix_trace_*()

The Trace (TRC) option isn't supported, so QNX Neutrino doesn't support the following:

pow(), powf(), powl()

For finite values of x less than 0 and finite non-integer values of y, pow(), powf(), and powl() return NaN. The return value for a correct value that would cause underflow is 0.0.

pthread_attr_destroy()

The QNX Neutrino implementation of pthread_attr_destroy() doesn't set an invalid value.

pthread_condattr_destroy(), pthread_condattr_init()

There are no additional implementation-defined condition variable attributes for pthread_condattr_destroy() and pthread_condattr_init() to destroy or initialize, and no additional functions for getting or setting such attributes.

pthread_getschedparam(), pthread_setschedparam()

The SCHED_OTHER policy is implemented identically to the SCHED_RR policy. The pthread_getschedparam() and pthread_setschedparam() functions affect only the priority scheduling parameter.

The pthread_setschedparam() function supports dynamically changing the policy to SCHED_SPORADIC.

pthread_rwlock_rdlock()

The Thread Execution Scheduling (TPS) option is supported, so a thread that calls pthread_rwlock_rdlock() doesn't acquire the lock if a writer holds the lock or there are writers blocked on the lock. The maximum number of simultaneous read locks is 2147483647.

pthread_rwlock_unlock()

The TPS option is supported, so if threads executing with the SCHED_FIFO, SCHED_RR, or SCHED_SPORADIC are waiting on a lock, they acquire the lock in priority order when a call to pthread_rwlock_unlock() means that the lock becomes available. For threads of equal priority, write locks take precedence over read locks.

pthread_rwlockattr_getpshared(), pthread_rwlockattr_setpshared()

There are no additional implementation-defined read-write lock attributes, so there are no functions in addition to pthread_rwlockattr_getpshared() and pthread_rwlockattr_setpshared() for getting or setting such attributes.

read()

For special device files, a subsequent read() request after the end-of-file condition has been reached results in 0 bytes being read.

When the value of nbyte is greater than SSIZE_MAX, the number of bytes read is limited to LONG_MAXoffset, where offset is the current file offset.

An EIO error may be returned if the filesystem resides on a removable media device, and the media has been forcibly removed.

remainder(), remainderf(), remainderl()

When x is infinite or y is zero and the other is non-NaN, remainder(), remainderf(), and remainderl() return NaN.

remquo(), remquof(), remquol()

For remquo(), remquof(), and remquol(), the value of n used to determine the magnitude of the result is 31. The return value when x is +/-Inf or y is zero and the other argument is non-NaN is NaN.

rint(), rintf(), rintl()

The current rounding mode used is determined by invoking the fegetround() function in the implementation of the rint(), rintf(), and rintl() functions.

scalbln(), scalblnf(), scalblnl(), scalbn(), scalbnf(), scalbnl()

When a correct value would cause an underflow, scalbln(), scalblnf(), scalblnl(), scalbn(), scalbnf(), and scalbnl() return 0.0.

sem_open()

When the name argument to sem_open() doesn't begin with a slash character, the semaphore is created with a name that consists of the specified name prepended with the current working directory.

Additional slash characters other than the leading slash character aren't interpreted, and the specified name, including these slash characters, is used to identify the semaphore.

setlocale()

Valid strings for the locale argument to setlocale() are:

When the locale string is set to "", the default native environment is the POSIX locale.

shm_open()

When the name argument doesn't begin with a slash, shm_open() creates or opens a shared memory object with the specified name relative to the current working directory of the calling process. This name appears in the file system and is visible to other functions that take pathnames as arguments.

Additional slash characters in the name cause the shared memory object be created with a pathname equivalent to name:

The intermediate directories corresponding to each slash-separated component have only read and search permissions.

sigaction()

When SA_SIGINFO isn't set in the sa_flags member of the sigaction structure passed to sigaction(), the disposition of subsequent occurrences of a pending signal aren't affected.

signal()

If you've used signal() to register a function to handle a signal, then when the signal occurs, it's blocked.

SIGBUS may be generated for a misaligned memory access:

sigwait()

When there are multiple pending instances of a single signal number prior to a call to sigwait(), all but one of the pending instances remain pending after a successful return of the sigwait() function.

sin(), sinf(), sinl()

If x is +/-Inf, sin(), sinf(), and sinl() return NaN.

sqrt(), sqrtf(), sqrtl()

For finite values of x < -0, sqrt(), sqrtf(), and sqrtl() return NaN. The return value when x is -Inf is NaN.

stat()

No additional or alternative file access control mechanisms are provided, so there are no implementation-defined reasons for stat() to fail.

strtod(), strtof(), strtold()

The strtod(), strtof(), and strtold() functions don't interpret an n-char sequence, and the result is equivalent to specifying nan or NAN without the n-char sequence.

No other subject sequences beyond those specified are accepted.

strtol(), strtoll()

The strtol() and strtoll() don't accept any other subject sequences beyond those specified.

strtoul(), strtoull()

The strtoul() and strtoull() functions don't accept any other subject sequences beyond those specified by the standard.

tan(), tanf(), tanl()

For a correct value that would cause an underflow, tan(), tanf(), and tanl() return 0.0. The return value when x is +/-Inf is NaN.

tgamma(), tgammaf(), tgammal()

When x is a negative integer, tgamma(), tgammaf(), and tgammal() return NaN. The return value when x is -Inf is NaN.

timer_create()

The timer_create() function fails if the clock ID corresponds to the CPU-time clock of a process or thread different from the process or thread invoking the function.

tmpnam()

After TMP_MAX names have been generated, tmpnam() reuses names that have been previously generated:

tzset()

If the TZ environment variable isn't set when you call tzset(), the value of the implementation-defined _CS_TIMEZONE confstr() string is used as the default time zone.

If no _CS_TIMEZONE string is set, the default timezone UTC0 is used.

uname()

The communications network for the nodename reported by uname() is primarily a TCP/IP network.

If the networking server has QNX Neutrino Transparent Distributed Processing (“Qnet”) enabled, the nodename is used to identify the node within the network of nodes that are able to communicate via the Qnet protocol.

Each member of the utsname structure is a 257-byte array:

This member: Contains the:
sysname[] OS name: "QNX"
nodename[] Host name in an unspecified format
release[] OS release level "6.4.x"
version[] Build date of the OS kernel as generated by a date +%Y/%m/%d-%T%Z command
machine[] Name of the hardware platform, in an unspecified format

Note: The official product name of the OS is “QNX Neutrino”, not simply “QNX”.

write()

When the value of nbyte is greater than SSIZE_MAX, the number of bytes written by the write() function is limited to LONG_MAXoffset, where offset is the current file offset.

An EIO error may be returned if the filesystem resides on a removable media device, and the media has been forcibly removed.

Non-POSIX functions with POSIX-sounding names

The following functions have POSIX-sounding names, but aren't part of a POSIX standard. Some have a suffix of “_np”, which stands for for “non-POSIX.”

execlpe()
execvpe()
fcloseall()
fgetchar()
flock()
fputchar()
gamma()
gammaf()
gammaf_r()
gamma_r()
isfdtype()
ltrunc()
mallopt()
mem_offset()
memalign()
memcpyv()
memicmp()
mmap_device_io()
mmap_device_memory()
mq_timedreceive_monotonic()
mq_timedsend_monotonic()
munmap_device_io()
munmap_device_memory()
munmap_flags()
openfd()
posix_spawn_file_actions_init()
posix_spawnattr_addpartid()
posix_spawnattr_addpartition()
posix_spawnattr_getnode()
posix_spawnattr_getpartid()
posix_spawnattr_getrunmask()
posix_spawnattr_getsigignore()
posix_spawnattr_getstackmax()
posix_spawnattr_getxflags()
posix_spawnattr_setnode()
posix_spawnattr_setrunmask()
posix_spawnattr_setstackmax()
posix_spawnattr_setxflags()
pthread_abort()
pthread_attr_getstacklazy()
pthread_attr_getstackprealloc()
pthread_attr_setstacklazy()
pthread_attr_setstackprealloc()
pthread_getname_np()
pthread_mutex_timedlock_monotonic()
pthread_mutex_wakeup_np()
pthread_mutexattr_getrecursive()
pthread_mutexattr_getwakeup_np()
pthread_mutexattr_setrecursive()
pthread_mutexattr_setwakeup_np()
pthread_setname_np()
pthread_sleepon_broadcast()
pthread_sleepon_lock()
pthread_sleepon_signal()
pthread_sleepon_timedwait()
pthread_sleepon_unlock()
pthread_sleepon_wait()
pthread_timedjoin()
pthread_timedjoin_monotonic()
sched_get_priority_adjust()
sem_timedwait_monotonic() shm_ctl()
shm_ctl_special()
sigblock()
sigmask()
sigsetmask()
sigunblock()
spawn()
spawnl()
spawnle()
spawnlp()
spawnlpe()
spawnp()
spawnv()
spawnve()
spawnvp()
spawnvpe()
straddstr()
strcmpi()
stricmp()
strlcat()
strlcpy()
strlwr()
strnicmp()
strnset()
strrev()
strsep()
strset()
strsignal()
strupr()
tcdropline()
tcgetsize()
tcinject()
tcischars()
tcsetsid()
tcsetsize()
tell()
timer_getexpstatus()
timer_timeout()
timer_timeout_r()
wait3()
wait4()
writeblock()

For more information about classification, see the Full Safety Information appendix in the HTML version of the QNX Neutrino Library Reference, as well as the entries for individual functions.