Changed content

acos(), acosf(), acosl()
For finite values not in the range [-1,1], these functions return NaN. The return value for +/-Inf is NaN.
acosh(), acoshf(), acoshl()
For finite values of x < 1, these functions return NaN. The return value when x is -Inf is NaN.
asin(), asinf(), asinl()
For finite values not in the range [-1,1], these functions return NaN. The return value for +/-Inf is NaN.
asyncmsg_channel_create()
This function and the callback that it registers now both have an extra argument that points to arbitrary data that you want to pass to the callback.
Note: You'll need to update and recompile any code that calls this function.
atan(), atanf(), atanhl()
For finite values of |x| > 1, these functions return NaN. The return value for +/-Inf is NaN.
aio_cancel()
The documentation now says that if aiocbptr isn't NULL, aio_cancel() ignores the fildes argument and attempts to cancel the I/O operation specified by the aiocb control block. The operation isn't canceled if it's already in progress.

This function indicates an error of EINVAL if the control block that aiocbptr points to isn't valid (i.e. it hasn't yet been used in any call to aio_read() or aio_write()).

aio_read(), aio_write()
The documentation now says that the asynchronous operation is submitted at the scheduling priority of the thread minus aiocbp->aio_reqprio.

If synchronized I/O is enabled on the file associated with aiocbptr->aio_fildes, these functions behave in accordance with the definitions of synchronized I/O data integrity completion and synchronized I/O file integrity completion.

asyncmsg_malloc(), calloc(), iofunc_lock_calloc(), malloc(), memalign(), realloc(), valloc()
Because the malloc() implementation uses signed, 32-bit integers to represent the size internally, you can't allocate more than 2 GB in a single allocation. If the size is greater than 2 GB, these functions indicate an error of ENOMEM.
bind()
Before calling bind() on an AF_INET socket, set the af_family member of the sockaddr structure to AF_INET. Up until QNX Neutrino 6.4.0, a value of 0 was accepted and assumed to be this value.
CACHE_FLUSH(), CACHE_INVAL()
Before using the CACHE_*() macros on ARM and MIPS platforms, the calling thread must obtain I/O privileges by calling:
ThreadCtl( _NTO_TCTL_IO, 0 );
ChannelCreate()
We've added some sample code that you can use to check for stale _PULSE_CODE_COIDDEATH pulses.
ClockTime()
If you call ClockTime() to set the time of day, the kernel checks to see if the SYSPAGE_ENTRY(qtime)->boot_time field is zero. If it is, the kernel sets it to the appropriate value.
confstr()
We've described the _CS_LOCALE configuration string.
ConnectAttach()
We've added EINVAL, EMFILE, and ENOREMOTE to the list of error codes.
ConnectClientInfo()
The sid member of the _client_info structure is used internally by Qnet.
ConnectServerInfo()
We've documented the flags field of the _server_info structure.

If the info argument is NULL, ConnectServerInfo() ignores connections with dead servers and skips to the next coid. If info is non-NULL, the function fills in the _server_info structure; for connections with dead servers, it turns on the _NTO_COF_DEAD bit in the flags field of the structure.

cos(), cosf(), cosl()
When x is +/-Inf, these functions return NaN.
daemon()
The High Availability Manager now automatically switches to monitoring the new process that daemon() creates, if the original process was a self-attached entity.
dlopen()
RTLD_LAZY is now implemented. For details about it, see "Lazy loading" in the Compiling and Debugging chapter of the QNX Neutrino Programmer's Guide.
erfc(), erfcf(), erfcl()
For a correct value that would cause an underflow, these functions return 0.0.
execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe()
  • These functions can give an error of ETXTBSY if the text file that you're trying to execute is busy (e.g. it might be open for writing).
  • The documentation for these functions now mentions that any memory locked by the calling process is unlocked.
exp(), expf(), expl()
For a correct value that would cause an underflow, these functions return 0.0.
fclose()
We've described the main error codes associated with this function.
fcntl()
This function indicates an error of EINVAL if the cmd argument is invalid.

The documentation now includes the following values for cmd:

  • F_ALLOCSP64
  • F_FREESP64
  • F_GETLK64
  • F_SETLK64
  • F_SETLKW64
fflush()
We've described the main error codes associated with this function.
fgetc()
We've described the main error codes associated with this function.
fork()
The documentation for this function now mentions that the child process doesn't inherit any memory locks from the parent.
fpathconf(), pathconf()
We've described the following:
  • _PC_ASYNC_IO
  • _PC_LINK_DIR
  • _PC_PRIO_IO
  • _PC_SYNC_IO
fputc()
We've described the main error codes associated with this function.
freopen()
This function indicates an error of EBADF if the underlying file descriptor is invalid or doesn't support the requested mode change.

We've listed the changes of mode that the Neutrino version of this function permits.

fseek(), fseeko()
We've listed the errors that these functions can indicate.

As a QNX Neutrino extensions, these functions give an error of ENOSYS if the underlying device is incapable of seeking.

fstatvfs(), statvfs()
  • The values of the f_files, f_ffree, and f_favail members of the statvfs structure depend on the filesystem.
  • We've updated the list of possible bits in the f_flags member.
  • The filesystem ID is currently the device ID.
getsockopt()
This entry now includes a section on setting the keepalive timing.
glob()
We've documented the following flags (which are NetBSD extensions):
  • GLOB_PERIOD
  • GLOB_MAGCHAR
  • GLOB_ALTDIRFUNC
  • GLOB_BRACE
  • GLOB_NOMAGIC
  • GLOB_TILDE
  • GLOB_NO_DOTDIRS
  • GLOB_LIMIT
inbe16(), inle16(), inbe32(), inle32()
Note that these macros access the specified port more than once if endian conversion is necessary. This could be a problem on some hardware.
InterruptAttach(), InterruptAttachEvent()
Note that it isn't safe to use floating-point operations in an Interrupt Service Routine (ISR).
InterruptMask(), InterruptUnmask()
These functions now give an error of ESRCH if the id parameter isn't something returned by InterruptAttach() or InterruptAttachEvent(), or -1.
InterruptDetach()
The thread that detaches an interrupt handler must be in the same process as the thread that attached it, or else this function indicates an error of EPERM.
ioctl()
We've made ioctl() compatible with other UNIX-based systems by enabling support for embedded pointers. This means that you no longer have to change calls to ioctl() into calls to ioctl_socket() in networking applications. As a result of this change, ioctl() can now indicate an error of ENOBUFS if there isn't enough memory available to copy the data that the embedded pointers refer to.
ionotify()
The documentation now states that this function enforces a restriction of one notification per message queue or resource manager. If a notification was already armed for the specified resource, ionotify() indicates an error of EBUSY.
ldexp(), ldexpf(), ldexpl()
For a correct value that would cause an underflow, these functions return 0.0.
log(), logf(), logl()
For finite values of x less than zero, these functions return NaN. The return value when x is -Inf is NaN.
log10(), log10f(), log10l()
For finite values of x less than zero, these functions return NaN. The return value when x is -Inf is NaN.
log1p(), log1pf(), log1pl()
For finite values of x less than -1, these functions return NaN. The return value when x is -Inf is NaN.
mallopt()
We've renamed MALLOC_FILLAREA to MALLOC_CKBOUNDS, and we've added more information about the MALLOC_CKALLOC, MALLOC_DUMP_LEAKS, MALLOC_EVENTBTDEPTH, MALLOC_FREE_CHECK, MALLOC_START_TRACING, MALLOC_STATS, MALLOC_TRACEBTDEPTH, MALLOC_TRACEMAX, MALLOC_TRACEMIN, MALLOC_TRACING, and MALLOC_VERIFY_ON options.
mem_offset()
If the offset is greater than INT_MAX, mem_offset() gives an error of EOVERFLOW. Use mem_offset64() if this happens.
message_attach()
Note that although the low and high arguments are of type int, message_attach() stores the values internally as short.
mkdir()
We've described the behavior for the S_ISGID and S_ISVTX bits.

Note that not all filesystems support the creation of directories.

mlock(), mlockall(), munlock(), munlockall()
For more information about locking, superlocking, and unlocking memory, see "Locking memory" in the Process Manager chapter of the System Architecture guide.

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

mmap()
The off argument to mmap() can be a physical address (e.g. for mapping a device's registers in a resource manager).
mq_open(), mq_unlink()
These functions indicate an error of ENOSYS if the message queue manager (mq or mqueue) isn't running.
MsgCurrent()
The documentation now points out that if you call MsgCurrent() on the rcvid pertaining to a low-priority client, then the priority boost given to your thread by a blocked high-priority thread can be lost.
MsgSend(), MsgSend_r(), MsgSendnc(), MsgSendnc_r(), MsgSendPulse(), MsgSendPulse_r(), MsgSendsv(), MsgSendsv_r(), MsgSendsvnc(), MsgSendsvnc_r(), MsgSendv(), MsgSendv_r(), MsgSendvnc(), MsgSendvnc_r(), MsgSendvs(), MsgSendvs_r(), MsgSendvsnc(), MsgSendvsnc_r()
These functions can indicate an error of EHOSTDOWN or EHOSTUNREACH if (for example) a send across Qnet failed.
MsgSendPulse()
  • If you specify a priority of -1, the function uses the calling thread's priority as the pulse's priority.
  • MsgSendPulse() gives an error of EINVAL if the specified priority is invalid (e.g. 0).
pow(), powf(), powl()
For finite values of x less than 0 and finite non-integer values of y, these functions return NaN. The return value for a correct value that would cause underflow is 0.0.
procmgr_daemon()
Note that the High Availability Manager (HAM) automatically monitors processes detached using procmgr_daemon() because they're in session 1.
pthread_cond_timedwait()
We've changed the example so that it uses CLOCK_MONOTONIC, which isn't affected by changes to the system time (unlike the default, CLOCK_REALTIME).
pthread_getschedparam()
As a QNX extension, the policy argument to pthread_getschedparam() can be NULL, in which case the function doesn't try to store the scheduling policy.
pthread_mutex_lock()
As a QNX Neutrino extension, this function can now return EINTR if the thread was unblocked by a call to pthread_mutex_wakeup_np().
pthread_mutexattr_setrecursive()
The pthread_mutexattr_settype() function provides a more portable way to make a mutex recursive.
pthread_rwlock_rdlock()
If another thread is currently waiting to acquire the read-write lock for writing, pthread_rwlock_rdlock() blocks. This can cause a deadlock if a thread attempts to recursively acquire the lock for reading, while another thread is trying to acquire the lock for writing.
pthread_setname_np()
This function gives an error of EBUSY when you're trying to name a thread other than the calling thread, and another program already has write access to the process's entry in the /proc filesystem.
read()
This function indicates an error of EIO if the filesystem resides on a removable media device, and the media has been forcibly removed.
readdir()
We've added more information about the dirent_extra and dirent_extra_stat structures that filesystems can provide as extra data.
regexec()
We've corrected the naming of the members from rm_sp and rm_ep to be rm_so and rm_eo respectively.
remainder(), remainderf(), remainderl()
If x is infinite or y is zero and the other is non-NaN, these functions return NaN.
scalbn(), scalbnf()
When a correct value would cause an underflow, these functions return 0.0.
scanf()
A - in the scanlist for the [ conversion specifier 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 -.

For the p conversion specifier, if the sequence contains more than 8 digits, the conversion is performed only on the last 8 digits in the sequence.

send(), sendmsg(), sendto()
These functions support the MSG_NOSIGNAL flag. Set it if you don't want to raise a SIGPIPE signal when the other end breaks the connection.
shm_ctl(), shm_ctl_special()
If you specify SHMCTL_PHYS in the flags, then paddr and size must be even multiples of the page size (sysconf(_SC_PAGE_SIZE)).
sigaction(), signal(), SignalAction()
Note that it isn't safe to use floating-point operations in a signal handler.
SignalAction()
QNX Neutrino uses the top eight signals for special purposes. They're always masked, and attempts to unmask them are ignored. They include named signals (e.g., SIGSELECT) and unnamed signals.
sigtimedwait()
This entry now mentions that the CLOCK_MONOTONIC clock is used to measure the time interval.
sin(), sinf(), sinl()
If x is +/-Inf, these functions return NaN.
sopen()
We've added EEXIST to the list of errors that this function can indicate.
spawn(), spawnp()
  • We've added more details about working with the fd_count and fd_map arguments to set up the file descriptors in the child process; see "Mapping file descriptors" in the entry for spawn().
  • We've expanded the list of possible errors:
    • ETXTBSY — the text file that you're trying to execute is busy (e.g. it might be open for writing).
    • EINVAL — an argument is invalid (e.g. argv[0] is NULL).
    • EINTR — the function was interrupted by a signal.
spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnv(), spawnve(), spawnvp(), spawnvpe()
We've expanded the list of possible errors:
  • ETXTBSY — the text file that you're trying to execute is busy (e.g. it might be open for writing).
  • EINVAL — an argument is invalid. For example, argv[0] or arg0 (depending on which spawn*() function you use) is NULL, or the value of the mode argument is invalid.
  • EINTR — the function was interrupted by a signal.
  • ECHILD — the value of the mode argument is P_WAIT, and the child process terminated before the waitpid() was completed.
sqrt(), sqrtf(), sqrtl()
For finite values of x < -0, these functions return NaN. The return value when x is -Inf is NaN.
SyncCtl()
There's a new cmd argument, _NTO_SCTL_MUTEX_WAKEUP, that's used to wake up any threads that are blocked on the specified mutex; see pthread_mutex_wakeup_np().
Note: Don't use the _NTO_SCTL_MUTEX_WAKEUP command directly.
SyncMutexEvent()
If you call SyncMutexEvent() with a NULL event, the function deletes any existing event registration.
sysconf()
We've described the following variables:
  • _SC_AIO_PRIO_DELTA_MAX
  • _SC_DELAYTIMER_MAX
  • _SC_GETGR_R_SIZE_MAX
  • _SC_GETPW_R_SIZE_MAX
  • _SC_SEM_NSEMS_MAX
  • _SC_SIGQUEUE_MAX
  • _SC_THREAD_STACK_MIN
  • _SC_TZNAME_MAX
SYSPAGE_ENTRY()
If you call ClockTime() to set the time of day, the kernel checks to see if the SYSPAGE_ENTRY(qtime)->boot_time field is zero. If it is, the kernel sets it to the appropriate value.
tan(), tanf(), tanhl()
For a correct value that would cause an underflow, these functions return 0.0.
ThreadCtl()
  • Not only does a _NTO_TCTL_IO command request I/O privileges, it also superlocks the process's memory.
  • A lack of I/O privileges may cause a SIGILL signal.
thread_pool_attr_t
This structure — described in the entry for thread_pool_create() — now has a tid_name entry that you can use to specify a name to use for the threads in the pool.
timer_create()
This 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.
timer_settime()
The documentation now says that this function rounds up time values that are between two consecutive nonnegative integer multiples of the resolution of the specified timer to the larger multiple of the resolution.
tmpnam()
After TMP_MAX names have been generated, this function reuses names that have been previously generated:
  • If a file with the new name doesn't exist, the new name is returned.
  • If a file with the new name does exist, a default pathname with a basename of 000000 is returned.
TraceEvent()
We've updated and expanded the entry for this function:
  • We've updated the list of event classes.
  • In order to set up the dynamic rules filter, your application must call ThreadCtl() with the _NTO_TCTL_IO flag to get I/O privileges.
  • We've expanded the description of the event_data_t structure. Note that you need to provide space for the data_array member of this structure.
  • We've described the _NTO_TRACE_GET*() and _NTO_TRACE_SET*() macros, which you can use to work with event headers.
traceparser(), traceparser_cs(), traceparser_cs_range(), traceparser_debug(), traceparser_destroy(), traceparser_get_info(), traceparser_init()
We've expanded the entries for these functions, which you'll use if you're creating your own utility for parsing trace data (as an alternative to traceprinter).
tzset()
This function assumes the time zone if UTC0 if neither the TZ environment variable nor the _CS_TIMEZONE configuration string is set.