Appendix: What's New in This Reference?

This appendix describes the updates to this document in the following releases:

Release New Deprecated Changed Errata
QNX Neutrino 6.5.0 SP1 online docs New Deprecated Changed Errata
QNX Neutrino 6.5.0 Service Pack 1 New Changed Errata
QNX Neutrino 6.5.0 New   Changed Errata
QNX Neutrino 6.4.1 New Deprecated Changed Errata
QNX Neutrino 6.4.0 New Deprecated Changed Errata
QNX Neutrino 6.3.2       Errata
QNX Neutrino Core OS 6.3.2 New   Changed  
QNX Neutrino 6.3.0 Service Pack 2 New   Changed Errata
QNX Neutrino 6.3.0 Service Pack 1 New   Changed Errata
QNX Neutrino 6.3.0 New Deprecated    
QNX Neutrino 6.2.1 New   Changed Errata
QNX Neutrino 6.2 New Deprecated   Errata
QNX Neutrino 6.1.0 New Deprecated    

What's new in the QNX Neutrino 6.5.0 SP1 online docs?

The changes in the QNX Neutrino 6.5.0 SP1 online docs include the following:

New entries

gettid()
Get the thread ID
grantpt()
Grant access to a slave pseudo-terminal device
hwiattr_get(), hwiattr_get_*()
Get attributes of a bus or device
hwi_find_bus()
Find the offset of the section in the system page for a bus
hwi_find_devicebus()
Find the bus that a device belongs to
hwi_find_device()
Find the offset in the system page of a device
hwi_find_num_units()
Count the instances of a unit in the system page
hwi_find()
Find a specific item instance owned by a specific parent, resolving all synonym names
hwi_find_unit()
Determine which instance of a device an offset corresponds to
hwi_next_item()
Find the next item in the hwinfo structure
hwi_next_tag()
Find the next tag in the hwinfo structure
hwitag_find_busattr()
Find a bus attribute tag associated with a bus
hwitag_find_clkfreq()
Find the clock source for a device
hwitag_find_errata()
Find an erratum for a device
hwitag_find_ivec()
Find the interrupt vector associated with a device
hwitag_find_nicaddr()
Get the NIC address of a device
hwitag_find_phyaddr()
Find the PHY address associated with a device
hwi_tag_find()
Locate a specific instance of the named tag for a device
iofunc_notify_remove_strict()
Remove a specified number of notification entries from a list
iofunc_notify_trigger_strict()
Send notifications to queued clients
isblank()
Test a character to see if it's a blank character
iswblank()
Test a wide character to see if it's a blank character
_NTO_TRACE_GET*(), _NTO_TRACE_SET*()
Macros for working with the header of a trace event
pathmgr_link()
Create a link
posix_fadvise()
Provide advisory information about the expected use of a file
posix_fallocate()
Allocate space for a file on the filesystem
posix_madvise()
Provide advisory information about the expected use of memory
posix_openpt()
Open a pseudo-terminal device
pthread_attr_getstack()
Get the thread-creation stack attributes
pthread_attr_setstack()
Set the thread-creation stack attributes
ptsname()
Get the name of a slave pseudo-terminal device
ptsname_r()
Get the name of a slave pseudo-terminal device
siginfo_t
Information about a signal
sysctlbyname()
Get or set information about the socket manager, specifying the name of the variable as a string
unlockpt()
Unlock a pseudo-terminal master/slave pair
waitfor()
Wait until a path exists

Deprecated content

Changed content

bt_sprn_memmap()
Note that the out string might not be null-terminated.
ChannelCreate()
chown()
You can pass -1 for the user ID or group ID (or both) if you don't want to change them.
clock_gettime()
You can pass CLOCK_PROCESS_CPUTIME_ID or CLOCK_THREAD_CPUTIME_ID as the clock_id argument to this function. These are special clock IDs that refer to the CPU time of the calling process and thread, respectively.
clock_nanosleep()
The descriptions of flags and rqtp have been updated.
clock_settime() ClockTime()
You can't set the time for a process or thread CPU-time clock.
close()
In the QNX Neutrino implementation, the file descriptor remains open when this function indicates an error of EINTR.
confstr()
The documentation now states that if the value, including the terminating NULL, is greater than len bytes long, it's truncated to len - 1 bytes and terminated with a NULL character.
ConnectClientInfo()
If the scoid argument is -1, this function gets the information about the calling process.
ConnectServerInfo()
Note that if the pid argument is 0, the function searches for the connection in the current process.
crypt()
We've deprecated the version of this function in libc. You should use the improved version that's in liblogin.
devctl(), devctlv()
dlopen()
For security reasons, the runtime linker unsets LD_DEBUG_OUTPUT and ignores the value of LD_LIBRARY_PATH and LD_PRELOAD if the binary has the setuid bit set.
encrypt()
We've added an example, but for more secure encryption, use OpenSSL instead of this function.
execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe()
We've added EMFILE to the list of error codes.
fcntl()
fopen()
We've described how you can change the size of the buffer that's used internally by the stream I/O functions. Doing this can improve buffered I/O performance.
fscanf(), fwscanf()
Note that these functions are generally considered to be unsafe for string handling. We've improved the examples by limiting the number of characters to be read.
getifaddrs()
This function can set errno to ENOMEM if the system is out of memory, or the interface list was growing while getifaddrs() was executing.
getitimer(), setitimer()
POSIX has marked these functions as obsolescent; you should use timer_gettime() and timer_settime() instead. Nevertheless, we've corrected the descriptions.
getsockname()
This function sets errno to EINVAL if the socket has been shut down.
getsockopt(), setsockopt()
InterruptAttach(), InterruptAttachEvent()
InterruptHookTrace()
We've added more details about how to use this function.
_io_connect
We've documented the _IO_CONNECT_EFLAG_DOTDOT extended flag.
iofunc_attr_init()
In general, there isn't a “correct” set of permissions to use for the resource; you should restrict them according to what you want other processes and users to be able to do with your resource manager.
iofunc_mknod()
We've added EACCES to the list of errors for this function.
iofunc_notify()
iofunc_notify_trigger(), iofunc_notify_trigger_strict()
iofunc_notify_remove(), iofunc_notify_remove_strict()
A resource manager typically calls one of these functions in its close_dup handler.
iofunc_ocb_calloc()
This function sets errno to ENFILE if it can't allocate the OCB. If you override this function in your resource manager, your replacement function should do the same.
iofunc_openfd(), iofunc_read_verify(), iofunc_write_verify()
We've removed the xtype types and flags that aren't relevant to these functions.
ionotify()
isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), isxdigit()
Note that these functions take an integer argument, but the value must be representable as an unsigned char or be EOF; the behavior for other values is undefined.
iswalnum(), iswalpha(), iswcntrl(), iswdigit(), iswgraph(), iswlower(), iswprint(), iswpunct(), iswspace(), iswupper(), iswxdigit()
Note that these functions take a wint_t argument, but the value must be a wide-character code that corresponds to a valid character in the current locale, or must be WEOF; the behavior for other values is undefined.
kill(), killpg()
If a signal terminates a process, the cleanup of the terminated process occurs by default at the priority of the thread that sent the signal. As a QNX Neutrino extension, if you OR the SIG_TERMER_NOINHERIT flag into the signal number, the cleanup occurs at the priority of the thread that received the signal.
lchown()
You can pass -1 for the user ID or group ID (or both) if you don't want to change them.
mallopt()
This entry now describes the libc and librcheck versions of this function.
memcpyv()
We've improved the example.
memicmp(), stricmp()
Note that these functions return different results:

The QNX 4 version of memicmp() returned the difference between the lowercase version of the characters.

message_attach()
mmap()
mq_notify()
This function sets errno to EINVAL if the notification argument is NULL but the process isn't currently registered.
MsgDeliverEvent(), MsgDeliverEvent_r()
We've provided more details about the possible meanings of the error codes.
MsgKeyData(), MsgKeyData_r()
MsgRead(), MsgRead_r()
Note that these functions can give an error of ESRCH if the thread has already been replied to.
MsgReadv(), MsgReadv_r()
MsgReceivePulsev(), MsgReceivePulsev_r(), MsgReceivev(), MsgReceivev_r(), MsgReplyv(), MsgReplyv_r(), MsgSendsv(), MsgSendsv_r(), MsgSendsvnc(), MsgSendsvnc_r(), MsgSendv(), MsgSendv_r(), MsgSendvnc(), MsgSendvnc_r(), MsgSendvs(), MsgSendvs_r(), MsgSendvsnc(), MsgSendvsnc_r()
These functions give an error of EOVERFLOW if the sum of the IOV lengths exceeds INT_MAX, or the number of IOV parts exceeds 524288.
MsgWrite(), MsgWrite_r()
Note that these functions can give an error of ESRCH if the thread has already been replied to.
MsgWritev(), MsgWritev_r()
name_attach()
This function gives an error of ENOENT if you attempt to attach a global name, but gns isn't running.
open()
Note that the O_ASYNC flag (a QNX Neutrino extension) isn't currently supported.
openlog()
You can use the LOG_CONS flag to redirect syslogd output to slogger.
pci_read_config(), pci_read_config8(), pci_read_config16(), pci_read_config32(), pci_write_config(), pci_write_config8(), pci_write_config16(), pci_write_config32()
For the details of the configuration space, see the _pci_config_regs structure in <hw/pci.h>; for examples of reading from it, see the entries for pci_attach_device() and pci_read_config16().
posix_spawn(), posix_spawnp()
pthread_cond_timedwait(), pthread_cond_wait(), pthread_mutex_timedlock(), pthread_mutex_timedlock_monotonic(), pthread_mutex_trylock()
These functions give an error of EINVAL if the mutex has died.
pthread_kill()
If a signal terminates a process, the cleanup of the terminated process occurs by default at the priority of the thread that sent the signal. As a QNX Neutrino extension, if you OR the SIG_TERMER_NOINHERIT flag into the signal number, the cleanup occurs at the priority of the thread that received the signal.
pthread_mutex_lock()
pulse_attach()
We've described the circumstances in which this function can indicate an error of EBUSY.
readdir_r()
Some filesystems support names that are longer than the value of NAME_MAX. You can use pathconf() with _PC_NAME_MAX to determine the maximum number of bytes (not including the terminating null) allowed in a file name for a particular filesystem.
resmgr_attach()
resmgr_connect_funcs_t
Note that in order to correctly define RESMGR_HANDLE_T, you need to #include <sys/iofunc.h> before <sys/resmgr.h>.
resmgr_context_t
We've described the extra member.
resmgr_handle_tune()
To avoid allocator thrashing, the resource manager framework always keeps at least eight handles and hash buckets, no matter what minimum values you specify. It also uses a minimum bucket size of 16.
resmgr_io_funcs_t
Note that in order to correctly define RESMGR_OCB_T, you need to #include <sys/iofunc.h> before <sys/resmgr.h>.
resmgr_msgreadv(), resmgr_msgreplyv(), resmgr_msgwritev()
These functions give an error of EOVERFLOW if the sum of the IOV lengths exceeds INT_MAX, or the number of IOV parts exceeds 524288.
rsrcdbmgr_devno_attach()
rsrcdbmgr_devno_detach()
Note that the process that's detaching the device number must be the process that attached it; otherwise this function sets errno to EINVAL.
scanf()
Note that this function is generally considered to be unsafe for string handling. We've improved the examples by limiting the number of characters to be read.
sched_rr_get_interval()
In QNX Neutrino, this interval is the timeslice for the SCHED_RR scheduling policy.
SchedCtl(), SchedCtl_r()
We've updated the description of the sched_aps_create_parms structure and documented the SCHED_APS_SCHEDPOL_PARTITION_LOCAL_PRIORITIES scheduling policy.
SchedInfo(), SchedInfo_r()
For the SCHED_RR and SCHED_OTHER scheduling policies, the interval is the timeslice in nanoseconds; for SCHED_FIFO and SCHED_SPORADIC, it's 0.
select_attach()
The attr argument isn't currently used; pass NULL for it.
sem_init()
It's always safe, and typically faster, to assure that sem is 32-bit aligned.
sem_post()
We've added EINTR to the list of error codes for this function.
sendmsg()
You typically use this function on datagram (SOCK_DGRAM) sockets, which use the send buffer only as a length check place the message in the interface transmit queue. If the interface transmit queue is full, sendmsg() returns -1 and sets errno to ENOBUFS.
shm_ctl(), shm_ctl_special()
On x86 processors, SHMCTL_LAZYWRITE now causes Write Combining to be used.
shutdown_system()
sigaction(), signal(), SignalKill(), sigqueue()
If a signal terminates a process, the cleanup of the terminated process occurs by default at the priority of the thread that sent the signal. As a QNX Neutrino extension, if you OR the SIG_TERMER_NOINHERIT flag into the signal number, the cleanup occurs at the priority of the thread that received the signal.
struct sigaction
We've documented the SA_NOCLDWAIT, SA_NODEFER, and SA_RESETHAND flags.
SignalAction()
SignalWaitinfo(), sigtimedwait(), sigwait(), sigwaitinfo()
We've explained how to work around a possible race condition between blocking the signal and calling these functions.
slogb(), slogf(), slogi()
If you want the data in the log message to be interpreted as text, use a bitwise OR to add _SLOG_TEXTBIT to the severity. If this bit is set, slogf() and vslogf() also write the log message on stderr.
snprintf()
The Caveats section now suggests a way to avoid the problem with calculating the length when you're building a string one piece at a time.
socket()
Note that we don't support SOCK_RDM or SOCK_SEQPACKET sockets.
socketpair()
We've made the example clearer.
stat()
We've added the octal values for the flags in the st_mode member of the stat structure..
strtok_r()
Note that you might want to keep a copy of the original string because strtok_r() is likely to modify it.
strtoimax(), strtoumax(), strtol(), strtoll(), strtoul(), strtoull()
If the conversion couldn't be performed, these functions return 0 and set errno to EINVAL.
SyncCondvarWait(), SyncCondvarWait_r()
These functions indicate an error of EINTR if they're interrupted by a signal.
SyncMutexEvent(), SyncMutexEvent_r()
The documentation now explains that the event is delivered when a mutex moves to the DEAD state. There's also a description of how you might manage the death of a process that has a mutex locked.
SyncTypeCreate(), SyncTypeCreate_r()
These functions give an error of EBUSY if the given synchronization object was previously initialized but hasn't been destroyed.
sysconf()
We've documented _SC_MQ_OPEN_MAX and _SC_MQ_PRIO_MAX.
tempnam(), tmpnam()
POSIX has marked this function as obsolescent; use mkstemp() or tmpfile() instead.
ThreadCreate()
We've documented the __guardsize and __prealloc members of the _thread_attr structure.
ThreadCtl()
thread_pool_create()
TimerAlarm(), TimerAlarm_r()
We've explained how to make the timer repeat.
TimerInfo()
TimerTimeout(), timer_timeout()
We've clarified how to use these functions.
tolower(), toupper()
Note that these functions take an integer argument, but the value must be representable as an unsigned char or be EOF; the behavior for other values is undefined.
towlower(), towupper()
Note that these functions take a wint_t argument, but the value must be a wide-character code that corresponds to a valid character in the current locale, or must be WEOF; the behavior for other values is undefined.
TraceEvent()
vfork()
Note that we provide this function for backward compatibility. You should use posix_spawn() instead.
vfscanf(), vfwscanf(), vscanf(), vwscanf(), wscanf()
Note that these functions are generally considered to be unsafe for string handling. We've improved the examples by limiting the number of characters to be read.
vslogf()
If you want the data in the log message to be interpreted as text, add _SLOG_TEXTBIT into the severity, with a bitwise OR. If this bit is set, slogf() and vslogf() also write the log message on stderr.
vsnprintf()
The Caveats section now suggests a way to avoid the problem with calculating the length when you're building a string one piece at a time.
waitid()
We've described the WTRAPPED flag.

Errata

abs()
The behavior of this function is undefined if the result can't be represented as an int.
alloca()
This function doesn't set errno; if there isn't enough memory, it simply returns NULL.
alphasort()
We've corrected the synopsis.
atexit()
We've corrected the synopsis.
bindresvport()
You need to include <rpc/rpc.h>.
bt_sprnf_addrs()
This function returns -1 and sets errno if an error occurred.
cabs(), cabsf(), cabsl()
We've corrected the synopsis.
calloc()
This function sets errno only if an error occurred.
Cancellation points
POSIX specifies a list of functions that must have cancellation points that occur when a thread is executing, and another of functions that may have cancellation points. No other function defined by POSIX can have cancellation points.

The following functions must have cancellation points but weren't marked as having them in the documentation:

The following functions are defined by POSIX, are not permitted by POSIX to be cancellation points, but were marked as such in the documentation:

The following functions have cancellation points:

clock_gettime()
You can't call this function with a clock ID of CLOCK_SOFTTIME.
closedir()
This function doesn't give an error of EBADF.
confstr()
We've corrected the description of what this function returns.
ConnectDetach(), ConnectDetach_r()
We've clarified what happens if client threads are SEND- or REPLY-blocked on the connection being detached.
delay()
This function doesn't set errno.
devctl()
This function returns ENOTTY, not ENOSYS, if the device doesn't support the given command.
dlerror()
This function returns NULL if no dynamic-linking errors have occurred since it was last invoked.
dup2()
_exit(), exit()
We corrected the name of EXIT_SUCCESS.
fcloseall()
This function closes all open streams, including stdin, stdout, and stderr.
fcntl()
There's no detection for deadlocks involving file locks; this function doesn't set errno to EDEADLK.
fflush()
This function ignores streams that aren't writeable.
fgets()
The second argument is of type int.
fork()
We've corrected the list of what the child process inherits from its parent.
getnameinfo()
NI_WITHSCOPEID is no longer used by this function.
getpagesizes(), getpagesizes64()
We've corrected the example.
getpwent(), getpwent_r(), getpwnam(), getpwnam_r(), getpwuid(), getpwuid_r()
inet_lnaof(), inet_makeaddr(), inet_netof(), inet_network()
We've corrected the synopsis of these functions.
INET6
You can't specify the address in a call to connect() or sendto() as :: to mean the local host.
InterruptAttach()
We've corrected the caveat about multithreaded resource managers.
InterruptHookIdle()
InterruptHookTrace()
There are currently no flags that apply to this function.
InterruptStatus()
We've corrected the synopsis.
ioctl()
iofunc_attr_unlock()
This function gives an error of EPERM if the caller doesn't own the lock.
iofunc_devctl(), iofunc_devctl_default()
These functions return _RESMGR_DEFAULT if they don't recognize the given command, so that your resource manager can then handle the command. If you don't process the command, the client library's devctl() routine returns ENOTTY.
iofunc_open_default()
This function doesn't call resmgr_open_bind() directly; it calls iofunc_ocb_attach(), which calls resmgr_open_bind() in turn.
iofunc_readlink()
We've corrected the description of this function.
iofunc_space_verify()
We've corrected the list of errors.
iofunc_sync_verify()
O_RSYNC isn't a valid flag for this function.
iofunc_write_default()
This function indicates that it wrote the requested number of bytes, not zero bytes.
IPv6
Use the IPV6_V6ONLY socket option to make AF_INET6 wildcard listening sockets accept IP6 traffic only.
kill()
For a process to have permission to send a signal to a process, the real or effective user ID of the sending process must either match the real or saved set-user ID of the receiving process or equal zero.
lfind(), lsearch()
We've corrected the synopsis.
lstat(), lstat64()
You can safely call these functions in a multithreaded process.
malloc()
This function sets errno only if an error occurred.
mbrlen(), mbrtowc(), mbsrtowcs()
These functions are to use in a multithreaded program if the ps argument isn't NULL.
mbrtowc(), mbsrtowcs(), mbstowcs()
These functions are affected by LC_CTYPE.
mbtowc()
message_attach()
This function isn't safe to call from a multithreaded program.
mmap()
modem_read()
This function returns 0 if successful, or -1 if an error occurred. If the buffer isn't large enough, modem_read() discards any incoming characters that won't fit in it. It terminates the string in buf with a null character.
MsgCurrent_r()
This function returns 0 on success. If an error occurs, it returns a value from the Errors section.
MsgReceive(), MsgReceivePulse(), MsgReceivePulsev(), MsgReceivev()
These functions have a cancellation point.
MsgSend*()
We've corrected the description of the coid argument.
munmap_flags()
We've corrected the names of the UNMAP_INIT_REQUIRED and UNMAP_INIT_OPTIONAL flags.
name_attach(), name_open()
pathmgr_link()
This function is declared in <sys/pathmgr.h>, and we've corrected the description. You rarely need to call this function directly.
pci_map_irq()
We've corrected the name of PCI_UNSUPPORTED_FUNCT.
pclose(), popen()
It's safe to call these functions in a multithreaded program.
posix_fadvise(), posix_fallocate()
These functions give an error of EINVAL if the len argument is less than zero; they succeed if len is zero.
posix_memalign()
If an error occurs, this function returns an error code, not -1. It doesn't set errno.
posix_mem_offset(), posix_mem_offset64()
We've corrected the description of this function.
printf()
procmgr_daemon()
This function sets errno if an error occurs.
procmgr_event_notify(), procmgr_event_notify_delete(), procmgr_event_trigger()
If an error occurs, these functions return -1 and set errno.
pthread_barrierattr_setpshared()
We've corrected the description of the default behavior.
pthread_cond_destroy()
If another thread is blocked on the condition variable, this function doesn't return EBUSY; instead, that thread becomes unblocked.
pthread_join(), pthread_timedjoin(), pthread_timedjoin_monotonic()
We've corrected the list of error codes that these functions return.
pthread_key_create(), pthread_key_delete()
These functions are now part of the base POSIX standard.
pthread_mutex_lock(), pthread_mutex_unlock()
It isn't safe to call these functions from a signal handler.
pthread_mutexattr_settype()
In QNX Neutrino, PTHREAD_MUTEX_DEFAULT mutexes are treated in the same way as PTHREAD_MUTEX_ERRORCHECK ones.
pulse_attach()
This function isn't safe to call from a multithreaded program.
pututline()
This function doesn't return anything.
readblock()
readdir(), readdir64(), readdir_r()
These functions don't give an error of EBADF.
realloc()
This function sets errno only if an error occurred.
realpath()
If resolved_name is NULL, the function allocates a buffer of the size indicated by _PC_PATH_MAX for storing the real path information in. You're responsible for freeing the memory.
resmgr_attach()
resmgr_msgreply(), resmgr_msgreplyv()
We've corrected the description of these functions.
rsrcdbmgr_attach(), rsrcdbmgr_create(), rsrcdbmgr_destroy(), rsrcdbmgr_detach(), rsrcdbmgr_devno_attach(), rsrcdbmgr_devno_detach()
In order to successfully use the rsrcdbmgr_*() functions to modify the resource database, your process must run as root.
rsrcdbmgr_create()
RSRCMGR_IRQ isn't supported as an alternative to RSRCDBMGR_IRQ.
sbrk()
We've corrected the example.
scandir()
We've corrected the synopsis and description.
SchedCtl()
We've corrected the descriptions of the SCHED_APS_SEC_FLEXIBLE and SCHED_APS_SEC_BASIC security options.
sched_param
The sched_ss_init_budget must be smaller than sched_ss_repl_period.
select_attach()
This function isn't safe to call from a multithreaded program.
sem_open()
setjmp(), sigsetjmp()
These functions return zero if invoked directly.
setlogmask()
It's safe to call this function in a multithreaded program.
sigaction()
If you set the action for SIGCHLD to SIG_DFL, the signal is ignored, but the process's children can still become zombies. They don't become zombies if you set the action for SIGCHLD to SIG_IGN.
signal()
If you want to terminate your program in a signal handler, call _exit(), not exit().
SignalAction()
strsignal()
As a QNX Neutrino extension, this function returns a pointer to an empty string if signo isn't a valid signal number or is the number of a QNX Neutrino signal.
slogb(), slogf()
These functions don't associate a special meaning with EINVAL.
spawn()
strdup()
This function sets errno if an error occurs.
strptime()
The classification for this function is POSIX XSI.
SyncDestroy()
The owner of a locked mutex is able to destroy it.
SyncTypeCreate()
syslog()
It's safe to call this function in a multithreaded program.
sysmgr_reboot()
If an error occurs, this function returns -1 and sets errno.
tcinject()
This function sets errno to ENOTTY if the fildes argument doesn't refer to a terminal device.
tcsetsid()
Both arguments to this function are declared as const.
tell64()
The classification for this function is QNX Neutrino.
telldir()
You can safely call this function in a multithreaded process.
thread_pool_control(), thread_pool_limits()
It's now all right to have several threads calling these functions with the same thread pool handle.
ThreadCreate()
TimerInfo()
trace_logf(), trace_nlogf(), trace_vnlogf()
TraceEvent()
The type of the tid argument for _NTO_TRACE_SETCLASSTID and _NTO_TRACE_SETEVENTTID is uint32_t.
traceparser_cs()
We've corrected the description of the arguments to the callback function.
traceparser_get_info()
We corrected the name of _TRACE_HEADER_KEYWORDS.
ualarm()
If the interval argument is nonzero, the alarm is repeated every interval microseconds. This function has been withdrawn from the POSIX standard.
valloc()
You should include <malloc.h>, not <stdarg.h>.
vfork()
This function has been withdrawn from the POSIX standard.
wait3(), wait4()
waitpid()
We've corrected the list of flags that you can set.
wcrtomb(), wcsrtombs()
These functions are safe to use in a multithreaded program if the ps argument isn't NULL.
wcstoimax(), wcstoumax(), wcstol(), wcstoll(), wcstoul(), wcstoull()
We've corrected the description of what these functions return.
wctomb()
This function isn't safe for you to use in a multithreaded program.
writeblock()

What's new in QNX Neutrino 6.5.0 Service Pack 1?

The changes in QNX Neutrino 6.5.0 SP1 include the following:

New entries

InterruptStatus()
Determine whether or not interrupts are enabled
MsgDeliverEvent()
We've corrected the description of the circumstances that could cause an error of ESRVRFAULT.
MsgRead(), MsgReadv(), MsgReceive(), MsgReceivePulse(), MsgReceivePulsev(), MsgReceivev(), MsgWrite(), MsgWritev()
We've corrected the description of the circumstances that could cause an error of EFAULT.
MsgSend(), MsgSendnc(), MsgSendPulse(), MsgSendsv(), MsgSendsvnc(), MsgSendv(), MsgSendvnc(), MsgSendvs(), MsgSendvsnc()
We've corrected the description of the circumstances that could cause an error of ESRVRFAULT.
round(), roundf(), roundl()
Round a number to the closest integer
procmgr_event_notify_add(), procmgr_event_notify_delete()
Add or remove a request to be notified of system-wide events.

Changed content

alloca()
The documentation now describes how the builtin and non-builtin versions of this function behave.
chroot()
This entry now points out that the path argument can include a network root (e.g. /net/node_name).
dladdr()
This function now provides the full path (instead of the base name) of the object, in order to match the behavior on other OSs.
dlopen()
For security reasons, the use of LD_DEBUG_OUTPUT with setuid binaries is disabled.
fcntl()
This function indicates an error of ENOSYS if the filesystem doesn't support the operation.
flock()
This function indicates an error of ENOSYS if the filesystem doesn't support file locks.
flockfile(), ftrylockfile(), funlockfile()
We've clarified the relationship between these functions.
freopen()
Note that the filepath argument can be NULL, in which case the function reopens the file associated with the stream fp.
_intr_v86()
We've expanded the list of possible errors.
lockf()
This function indicates an error of ENOSYS if the filesystem doesn't support file locks.
mmap()
mmap_device_io()
On non-x86 systems, the calling process must be running as root in order to map device I/O memory.
mmap_device_memory()
The calling process must be running as root in order to map device memory.
mount()
Note that updating a mount resets the other mount flags to their default values.
mount_parse_generic_args()
We've added implied to the list of options that this function processes.
MsgCurrent()
Calling MsgCurrent() on the rcvid pertaining to a low-priority client no longer causes a priority boost given to your thread by a blocked high-priority thread to be lost.
nanospin_calibrate()
In order to make startup faster and reduce jitter, nanospin_calibrate() now tries to read the calibration data from values stored in the system page. The startup for some boards includes an -o option that you can use to specify the calibration data (100 loop time and overhead) to store in the system page.
pci_attach_device()
This entry now describes the PCI_USE_MSI and PCI_USE_MSIX flags and includes an example that shows how you can detect whether or not a device supports MSI or MSI-X.
pci_read_config(), pci_read_config8(), pci_read_config16(), pci_read_config32()
Note that the pci_read_config*() functions can return inconsistent data if another process is extensively using the PCI bus.
posix_spawn(), posix_spawn_file_actions_addclose(), posix_spawn_file_actions_adddup2(), posix_spawn_file_actions_destroy(), posix_spawn_file_actions_init(), posix_spawnattr_addpartid(), posix_spawnattr_addpartition(), posix_spawnattr_destroy(), posix_spawnattr_getcred(), posix_spawnattr_getflags(), posix_spawnattr_getnode(), posix_spawnattr_getpartid(), posix_spawnattr_getpgroup(), posix_spawnattr_getrunmask(), posix_spawnattr_getschedparam(), posix_spawnattr_getschedpolicy(), posix_spawnattr_getsigdefault(), posix_spawnattr_getsigignore(), posix_spawnattr_getsigmask(), posix_spawnattr_getstackmax(), posix_spawnattr_getxflags(), posix_spawnattr_init(), posix_spawnattr_setcred(), posix_spawnattr_setflags(), posix_spawnattr_setnode(), posix_spawnattr_setpgroup(), posix_spawnattr_setrunmask(), posix_spawnattr_setschedparam(), posix_spawnattr_setschedpolicy(), posix_spawnattr_setsigdefault(), posix_spawnattr_setsigignore(), posix_spawnattr_setsigmask(), posix_spawnattr_setstackmax(), posix_spawnattr_setxflags(), posix_spawnp()
We've revised and expanded the documentation for these functions.
pthread_setname_np()
_NTO_THREAD_NAME_MAX is defined in <sys/neutrino.h>.
readdir()
Note that you can use ftw() as a different way to walk a file tree.
resmgr_attach()
This function indicates an error of EBUSY if an internal resource isn't available.
shm_ctl(), shm_ctl_special()
We've documented the SHMCTL_ISADMA and SHMCTL_NOX64K flags.
spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe()
If you use the P_WAIT flag, you need to use a status macro such as WEXITSTATUS() to extract information from the value returned by the spawn*() functions; see Status macros in the documentation for wait().
straddstr()
We've added more details about how this function handles null characters.

Errata

ChannelCreate()
Typically your program calls ChannelCreate() only once, and all threads block on that channel. We've corrected the call to MsgReplyv() in one of the examples.
clock_getcpuclockid(), clock_gettime(), ClockId(), ClockId_r(), ClockTime(), ClockTime_r()
We've corrected the description of these functions.
dircntl()
We've corrected the description of what this function returns.
dirname()
If you pass a string of "/usr/" to dirname(), the string returned is "/", not "usr".
execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe()
We've corrected the spelling of EACCES.
ftruncate(), ftruncate64()
These functions can indicate an error of ENOMEM if there wasn't enough memory to change the size of a shared memory object.
ftw()
We've corrected the spelling of EACCES.
getrlimit()
RLIMIT_FSIZE and RLIMIT_MEMLOCK aren't supported.
getsockopt()
We've corrected the call to memset() in the example.
iofunc_check_access()
We've corrected the spelling of EACCES.
iofunc_stat_default()
This function returns -1, to indicate to the resource manager library that it should return one part from the ctp->iov structure (see resmgr_context_t) to the client.
mem_offset(), mem_offset64()
We've corrected the description of these functions. You must specify NOFD for the fd argument; to get the offset and length of a mapped typed memory block, use posix_mem_offset() or posix_mem_offset64().
mount_parse_generic_args()
We've corrected the names of the _MOUNT_NOATIME, _MOUNT_NOCREAT, and _MOUNT_NOSUID flags.
mq_open()
You need to include <fcntl.h> if you want to use O_CREAT, O_EXCL, or O_NONBLOCK when you call this function.
munmap()
The ability to munmap() just a part of an area mapped with mmap() was introduced in QNX Neutrino 6.3.2.
nftw()
posix_spawn(), posix_spawn_file_actions_addclose(), posix_spawn_file_actions_adddup2(), posix_spawn_file_actions_destroy(), posix_spawn_file_actions_init(), posix_spawnattr_addpartid(), posix_spawnattr_addpartition(), posix_spawnattr_destroy(), posix_spawnattr_getcred(), posix_spawnattr_getflags(), posix_spawnattr_getnode(), posix_spawnattr_getpartid(), posix_spawnattr_getpgroup(), posix_spawnattr_getrunmask(), posix_spawnattr_getschedparam(), posix_spawnattr_getschedpolicy(), posix_spawnattr_getsigdefault(), posix_spawnattr_getsigignore(), posix_spawnattr_getsigmask(), posix_spawnattr_getstackmax(), posix_spawnattr_getxflags(), posix_spawnattr_init(), posix_spawnattr_setcred(), posix_spawnattr_setflags(), posix_spawnattr_setnode(), posix_spawnattr_setpgroup(), posix_spawnattr_setrunmask(), posix_spawnattr_setschedparam(), posix_spawnattr_setschedpolicy(), posix_spawnattr_setsigdefault(), posix_spawnattr_setsigignore(), posix_spawnattr_setsigmask(), posix_spawnattr_setstackmax(), posix_spawnattr_setxflags(), posix_spawnp()
 
posix_typed_mem_open()
You need to include <fcntl.h> in order to get the definitions of O_RDONLY, etc.
pthread_getcpuclockid()
We've corrected the description of this function.
rename()
We've corrected the spelling of EACCES.
SchedGet()
This routine returns an actual scheduling policy value, not SCHED_ADJTOHEAD or SCHED_ADJTOTAIL.
sem_open()
You need to include <fcntl.h> if you want to use O_CREAT or O_EXCL when you call this function.
sem_unlink()
We've corrected the spelling of EACCES.
setdomainname()
It isn't safe to call this function from an interrupt handler.
setrlimit()
RLIMIT_FSIZE and RLIMIT_MEMLOCK aren't supported.
shm_ctl_special()
Calling shm_ctl_special() with a special argument of 0 isn't equivalent to calling shm_ctl().
spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe()
We've corrected the spelling of EACCES.
stat()
S_IFMT is a mask for the file-type bits in st_mode.
SyncTypeCreate()
We've corrected the name of the _sync_attr structure.
tmpfile()
We've corrected the spelling of EACCES.
trace_logf(), trace_nlogf(), trace_vnlogf()
It isn't safe to call these functions from an interrupt handler if the formatting codes or parameters include floating-point elements.
wcscpy(), wcsncpy(), wcstoul(), wcstoull(), wcsxfrm(), wprintf(), wscanf()
We've corrected the synopsis.

What's new in QNX Neutrino 6.5.0?

The changes in QNX Neutrino 6.5.0 include the following:

New entries

acoshl()
Compute the inverse hyperbolic cosine
acosl()
Compute the arccosine of an angle
asinhl()
Compute the inverse hyperbolic sine
asinl()
Compute the arcsine of an angle
atanhl()
Compute an inverse hyperbolic tangent
atanl()
Compute the arctangent of an angle
coshl()
Compute the hyperbolic cosine
cosl()
Compute the cosine of an angle
devctlv()
Control a device, using I/O vectors to pass data to and from the driver
erfcl()
Complementary error function
expl()
Compute the exponential function of a number
fmodl()
Compute a residue, using floating-point modular arithmetic
fseeko64()
Change the current position of a stream
ftello64()
Return the current position of a stream
getpagesizes(), getpagesizes64()
Get the available page sizes
getpeereid()
Get the effective credentials of a UNIX-domain peer
ioctl_socket()
An optimized version of ioctl() that provides special handling for some commands that use embedded pointers
ldexpl()
Multiply a floating-point number by an integral power of 2
llabs()
Calculate the absolute value of a long long integer
log1pl()
Log(1+x)
log10l()
Compute the logarithm (base 10) of a number
logl()
Compute the natural logarithm of a number
ncurses
Control a terminal's display
_NTO_TRACE_GET*(), _NTO_TRACE_SET*()
Macros for use with the header of a trace event.
powl()
Raise a number to a given power
pthread_mutex_timedlock_monotonic()
This function is similar to pthread_mutex_timedlock(), but it uses CLOCK_MONOTONIC, so the timeout isn't affected by changes to the system time.
pthread_mutex_wakeup_np()
Unblock any threads that are waiting on a mutex
pthread_mutexattr_getwakeup_np()
Get the wakeup attribute of a mutex
pthread_mutexattr_setwakeup_np()
Set the wakeup attribute of a mutex
pthread_setschedprio()
Set a thread's priority
pthread_timedjoin_monotonic()
This function is similar to pthread_timedjoin(), but it uses CLOCK_MONOTONIC, so the timeout isn't affected by changes to the system time.
remainderl()
Compute the floating point remainder
rintl()
Round to the nearest integral value
sem_timedwait_monotonic()
This function is similar to sem_timedwait(), but it uses CLOCK_MONOTONIC, so the timeout isn't affected by changes to the system time.
shutdown_system()
Shut down the system; note that you can customize this function by providing your own callouts:
sinhl()
Compute the hyperbolic sine
sinl()
Calculate the sine of an angle
sqrtl()
Calculate the nonnegative square root of a number
strerror_r()
Convert an error number into an error message (reentrant)
strtof(), strtold()
Convert a string into a float and long double, respectively.
tanhl()
Calculate the hyperbolic tangent
tanl()
Calculate the tangent of an angle
trace_func_enter()
Insert a trace event for the entry to a function
trace_func_exit()
Insert a trace event for the exit from a function
trace_here()
Insert a trace event for the current address
trace_logb()
Insert a user combine trace event
trace_logbc()
Insert a trace event of an arbitrary class and type with arbitrary data
trace_logf()
Insert a user string trace event
trace_logi()
Insert a user simple trace event
trace_nlogf()
Insert a user string trace event, specifying a maximum string length
trace_vnlogf()
Insert a user string trace event, using a variable argument list

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()
 
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:

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:
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()
getsockopt()
This entry now includes a section on setting the keepalive timing.
glob()
We've documented the following flags (which are NetBSD extensions):
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()
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 two named signals (SIGSELECT and SIGPHOTON) and six unnamed ones.
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()
spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnv(), spawnve(), spawnvp(), spawnvpe()
We've expanded the list of possible errors:
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:
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()
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:
TraceEvent()
We've updated and expanded the entry for this function:
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.

Errata

clock_settime()
An error of EINVAL could mean that the tv_sec member of the timespec structure is set to -1.
getopt()
We've corrected the “Returns” section of this entry.
InterruptAttach()
This function currently ignores the size argument.
malloc()
mprotect()
In QNX Neutrino 6.4.0 and later, the addr argument isn't const.
mq_open()
We've corrected the description of how this function interprets the name argument.
MsgDeliverEvent()
We've corrected the server.c part of the example so that it handles the _IO_CONNECT message sent because of the usage of name_attach().
MsgReceive(), MsgReply(), MsgSend(), MsgSendnc()
The value of SSIZE_MAX is 231 − 1, not 232 − 1.
MsgSendPulse()
If you send a pulse across the network, the calling thread is blocked (STATE_NET_SEND) while the pulse is delivered to the local Qnet manager, which transmits it to the remote Qnet. The remote Qnet does a MsgSendPulse() on behalf of the caller, and the return value is transmitted back, at which point the calling thread is unblocked.
munlockall()
The full POSIX implementation for this function was added in the QNX Neutrino Core OS 6.3.2, but the documentation wasn't updated.
posix_memalign()
The alignment argument must be a multiple of size( void * ) that's also a power of 2.
pthread_cond_init()
In QNX Neutrino 6.4.0 and later, the attr argument is declared as const pthread_condattr_t *.
pthread_mutex_lock()
This function's behavior when you try to lock a mutex that you already own depends on the type of the mutex. For more information, see the entry for pthread_mutexattr_settype().
pthread_mutex_unlock()
We've corrected the description of the adjustments to a thread's priority when it unlocks a mutex. If the thread's priority was raised when a higher-priority thread attempted to lock the mutex, the calling thread's priority is again adjusted when it unlocks the mutex; its new priority is the maximum of its own priority and the priorities of those threads it still blocks, either directly or indirectly.
pthread_mutexattr_getprotocol(), pthread_mutexattr_setprotocol()
PTHREAD_PRIO_NONE was implemented in QNX Neutrino 6.4.0. This protocol means that owning the mutex doesn't affect the priority and scheduling of a thread.
putenv()
The type of the env_name argument is char *, not const char *.
pwrite()
We've corrected the list of error codes for this function.
random(), srandom()
We've corrected some numbers that should have been 2nn, not 2nn.
SchedCtl()
We've corrected the name of SCHED_APS_SEC_OFF.
seekdir()
If you call rewinddir() on the directory stream, or if you close and reopen the directory, an offset previously returned by telldir() becomes invalid.
sem_open()
We've corrected the description of how this function interprets the name argument.
send(), sendmsg(), sendto()
We've corrected the list of error codes for these functions.
shm_ctl(), shm_ctl_special()
We've corrected the spelling and description of SHMCTL_HIGHUSAGE.
shm_open()
This function indicates an error of EINVAL if an underlying call to resmgr_open_bind() fails.
signal()
Since signal-catching functions are invoked asynchronously with process execution, you need to take into account the same sort of things that you would in a multithreaded program when inspecting or manipulating shared resources; you might have to call InterruptLock() or InterruptUnlock(), but these functions aren't portable.

If a process sets the action for the SIGCHLD signal to SIG_IGN, its children won't enter the zombie state and the process can't use wait() or waitpid() to wait on their deaths.

SignalAction()
The default action for SIGTSTP, SIGTTIN, and SIGTTOU is to stop the process.
sleep()
POSIX doesn't define any errors for this function.
spawn(), spawnp()
The value of argv[0] can't be NULL.
strptime()
We corrected the call to memset() in the example.
tell64()
We've corrected the synopsis of this function.
ThreadCreate()
To get a pointer to the thread local storage, call __tls().
timer_settime()
In QNX Neutrino 6.4.0 and later, the value argument is of type const struct itimerspec *.
unsetenv()
In QNX Neutrino 6.4.0 and later, this function returns 0 for success, or -1 if an error occurred.
wordexp()
This function returns WRDE_NOSYS; it doesn't set errno.
write()
We've corrected the list of error codes for this function.

What's new in QNX Neutrino 6.4.1?

The changes in QNX Neutrino 6.4.1 include the following:

New entries

bt_get_backtrace()
Collect a backtrace

Note: The backtrace library is an unsupported feature, due to its fragility. For more information, see Backtraces in the QNX Neutrino technotes.

bt_init_accessor()
Initialize a backtrace accessor
bt_load_memmap()
Load a memory map associated with a backtrace
bt_release_accessor()
Release an accessor for a backtrace
bt_set_flags()
Set or clear the flags for backtracing
bt_sprn_memmap()
Format the memory map information for a backtrace
bt_sprnf_addrs()
Format the addresses from a backtrace
bt_translate_addrs()
Translate the addresses from a backtrace
bt_unload_memmap()
Unload a memory map associated with a backtrace
endfsent()
Close the filesystem table (/etc/fstab) file
fchdir()
Change the working directory
fp_setenv()
Set the floating point environment
posix_spawnattr_getcred()
Get the uid and gid of the child process
getfsent()
Get the next entry from the filesystem table (/etc/fstab) file
getfsfile()
Search for a filesystem name in the filesystem table (/etc/fstab) file
getfsspec()
Search for a block special device in the filesystem table (/etc/fstab) file
getpagesize()
Get the current page size
getpwent_r()
Get the next entry from the password database
IOFUNC_NOTIFY_DISARM(), IOFUNC_NOTIFY_INIT()
Disarm or initialize a notification list; see the entry for iofunc_notify().
IOFUNC_NOTIFY_INPUT_CHECK(), IOFUNC_NOTIFY_OBAND_CHECK(), IOFUNC_NOTIFY_OUTPUT_CHECK()
Check a notification list to see if it's worthwhile calling iofunc_notify_trigger() for it; see the entry for iofunc_notify_trigger().
iruserok(), iruserok_sa()
Check the identity of a remote host
mq_timedreceive_monotonic(), mq_timedsend_monotonic()
These functions are similar to mq_timedreceive() and mq_timedsend(), but they use CLOCK_MONOTONIC, so the timeout isn't affected by changes to the system time.
rcmd_af()
Execute a command on a remote host
resmgr_handle_grow()
Expand the capacity of the device manager database
resmgr_msgreply()
Reply to client with a message
resmgr_msgreplyv()
Reply to client with a message
resmgr_msg_again()
Process a message again in a resource manager
rresvport_af()
Obtain a socket with a privileged address
posix_spawnattr_setcred()
Set the uid and gid of the child process
setfsent()
Open the filesystem table (/etc/fstab) file
strlcat(), strlcpy()
Size-bounded string copying and concatenation

Deprecated content

Instead of using: Use:
_resmgr_handle_grow() resmgr_handle_grow()
_resmgr_io_func() resmgr_iofuncs()
_resmgr_ocb() resmgr_ocb() (Note that this function takes only one argument, a pointer to a resmgr_context_t structure.)

Changed content

atomic_add(), atomic_add_value(), atomic_clr(), atomic_clr_value(), atomic_set(), atomic_set_value(), atomic_sub(), atomic_sub_value(), atomic_toggle(), atomic_toggle_value()
Perform atomic operations only on objects that were allocated in normal memory mappings. On certain processors (e.g. some PPC ones), atomic operations will cause a fault if the object is allocated in uncached memory.
calloc(), malloc(), realloc()
The MALLOC_OPTIONS environment variable now controls how these functions behave if you specify a size of 0 (or a value of 0 for the n argument to calloc()). The V (“System V”) and R (“use the realloc() behavior of QNX Neutrino 6.4.0 and earlier”) columns below indicate how the functions behave if the value of MALLOC_OPTIONS includes that letter:
Function Default V R
calloc(n, 0) Non-NULL NULL No effect
malloc(0) Non-NULL NULL No effect
realloc(NULL, 0) Non-NULL NULL No effect
realloc(non-NULL, 0) Non-NULL NULL NULL

In all the above cases, if the function returns a non-NULL pointer, it's valid only for a corresponding call to free() or realloc().


Note: The default behavior of realloc(non-NULL, 0) has changed in this release. Calls like this used to return NULL.

ConnectAttach()
If a process wants other processes to communicate with it, it typically uses name_attach() to create a channel and associate a name with it, and the sender process uses name_open() to locate that name and create a connection to it.
daemon()
The High Availability Manager can see death messages only from tasks that are running in session 1, and daemon() doesn't put the caller into that session; use procmgr_daemon() instead if you want to use your application with the HAM.
dlopen()
The description of resolving symbols now includes LD_PRELOAD.
dlsym()
This function now supports the special RTLD_NEXT flag.
fdatasync(), fsync()
These functions block until the given file has been synchronized. For more information about synchronizing, see Filesystems and block I/O (devb-*) drivers in the Fine-Tuning Your System chapter of the QNX Neutrino User's Guide.
InterruptAttach()
On a multicore system, the interrupt handler runs on the CPU that takes the interrupt.
InterruptAttachEvent()
On a multicore system, the thread that receives the event set up by InterruptAttachEvent() runs on any CPU, limited only by the scheduler and the runmask.
InterruptHookTrace()
The integer that's passed to the handler is a combination of the buffer index and the sequence number; to extract each, pass the integer to the _TRACE_GET_BUFFNUM() and _TRACE_GET_BUFFSEQ() macros.
InterruptWait()
On a multicore system, a thread that calls InterruptWait() runs on any CPU, limited only by the scheduler and the runmask.
iofunc_notify()
We've added more details about the extended (_NOTIFY_CONDE_*) flags.
mmap()
_msg_info
We've added more information about the flags member of this structure.
MsgDeliverEvent(), MsgDeliverEvent_r()
These functions can give an error code of EINVAL if the given event isn't valid.
MsgReceivePulsev(), MsgReceivePulsev_r(), MsgReceivev(), MsgReceivev_r(), MsgSendsv(), MsgSendsv_r(), MsgSendsvnc(), MsgSendsvnc_r(), MsgSendv(), MsgSendv_r(), MsgSendvnc(), MsgSendvnc_r(), MsgSendvs(), MsgSendvs_r(), MsgSendvsnc(), MsgSendvsnc_r()
These functions now give an error of EOVERFLOW instead of overflowing a buffer if the sum of the user's IOV lengths exceeds INT_MAX.
name_attach()
This function can indicate an error of EBUSY if it couldn't create a channel.
nanospin(), nanospin_calibrate(), nanospin_count(), nanospin_ns(), nanospin_ns_to_count()
The nanospin*() functions wait for at least the specified time; they might not wait for exactly the specified time. For more information, see the Tick, Tock: Understanding the Neutrino Microkernel's Concept of Time chapter of the QNX Neutrino Programmer's Guide.
pthread_attr_setstackaddr(), pthread_attr_setstacksize()
The system uses some of the provided stack for objects such as thread local storage and an initial stack frame, so less than the entire buffer is available to the thread.
pthread_barrier_init(), pthread_cond_init(), pthread_mutex_init(), pthread_once(), pthread_rwlock_init(), sem_init() SyncTypeCreate(), SyncTypeCreate_r()
You should allocate mutexes, condvars, barriers, reader/writer locks, semaphores, and the control structure for pthread_once() only in normal memory mappings. On certain processors (e.g. some PPC ones), atomic operations such as calls to pthread_mutex_lock() will cause a fault if the control structure is allocated in uncached memory.
pthread_cond_timedwait()
When setting the time for use with this function, you can use nsec2timespec() to convert times in nanoseconds to a timespec structure (and timespec2nsec() to convert them back again).
resmgr_attach()
There's a new flag called RESMGR_FLAG_CROSS_ENDIAN that indicates whether the server handles cross-endian support.

The resmgr_attach() function copies the pointers to the resmgr_connect_funcs_t and resmgr_io_funcs_t structures, not the structures themselves. You should allocate the structures, declare them to be static, or make them global variables. If your resource manager is for more than one device with different handlers, create separate structures that define the handlers.

resmgr_detach()
We've described the _RESMGR_DETACH_CLOSE flag, which closes all bindings when detaching.
setrlimit()
In QNX Neutrino, RLIMIT_DATA covers all mappings made by the process that are MAP_ANON | MAP_PRIVATE that aren't MAP_STACK, which corresponds typically to heap allocations.
ThreadCtl(), ThreadCtl_r()
These functions indicate an error of EINVAL if the specified runmask is invalid.
timer_getoverrun()
Note that pulses are queued for a process, so timer overruns occur only for signals.

Errata

ConnectAttach()
You likely need to include <sys/netmgr.h> when you use this function, in order to define ND_LOCAL_NODE.
struct dirent
In some filesystems, the d_offset member identifies the directory entry itself; in others, it's the offset of the next directory entry.
gettimeofday(), settimeofday()
We've corrected the types of the members of the timeval structure.
InterruptAttachEvent()
An error of EPERM indicates that the process doesn't have I/O privileges.
iofunc_attr_t
The nlink member of this structure must be at least 2 for names that represent a directory (one for the directory itself, one for the ./ entry in it).
iofunc_lock()
This function is actually implemented.
mq_receive()
If the given msg_len is less than the mq_msgsize for the given queue, this function sets errno to EMSGSIZE, not EINVAL.
name_attach()
We've corrected the example so that it now compiles cleanly.
resmgr_attach()
We've corrected the information about the flags:
resmgr_iofuncs()
The public version of this function takes only one argument, a pointer to a resmgr_context_t structure.
setrlimit()
If the RLIMIT_DATA limit is exceeded, the brk(), mmap(), and sbrk() functions fail with errno set to ENOMEM.
timer_timeout(), TimerTimeout()
Because of the nature of time measurement, timers might actually expire later than the specified time. For more information, see the Tick, Tock: Understanding the Neutrino Microkernel's Concept of Time chapter of the QNX Neutrino Programmer's Guide.
ttyname(), ttyname_r()
We've corrected the list of errors that these functions can indicate.
wait(), wait4(), waitid(), waitpid()
These functions suspend the calling thread, not the calling process.

What's new in QNX Neutrino 6.4.0?

The changes in QNX Neutrino 6.4.0 include the following:

New entries

dirent
Data structure for a directory entry.
dispatch_create_channel()
Allocate a dispatch handle, specifying a channel ID.
insque()
Insert an element into a doubly linked queue
isfinite()
Determine if a number is finite
MsgCurrent()
Resume processing of a message.
posix_spawn(), posix_spawnp()
Spawn a process
posix_spawn_file_actions_addclose()
Add a “close a file descriptor” action to a spawn file actions object
posix_spawn_file_actions_adddup2()
Add a “duplicate a file descriptor” action to a spawn file actions object
posix_spawn_file_actions_destroy(),
Destroy a spawn file actions object
posix_spawn_file_actions_init()
Initialize a spawn file actions object
posix_spawnattr_addpartid()
Specify the ID of a resource partition that the spawned process should be associated with
posix_spawnattr_addpartition()
Specify the name of a resource partition that the spawned process should be associated with
posix_spawnattr_destroy()
Destroy a spawn attributes object
posix_spawnattr_getcred()
Get the user and group ID attributes from a spawn attributes object
posix_spawnattr_getflags()
Get the POSIX flags from a spawn attributes object
posix_spawnattr_getnode()
Get the remote node attribute from a spawn attributes object
posix_spawnattr_getpartid()
Retrieve the partition identifiers currently set in a spawn attributes object
posix_spawnattr_getpgroup()
Get the process group attribute of a spawn attributes object
posix_spawnattr_getrunmask()
Get the runmask attribute from a spawn attributes object
posix_spawnattr_getschedparam()
Get the scheduling parameters attribute of a spawn attributes object
posix_spawnattr_getschedpolicy()
Get the scheduling policy attribute of a spawn attributes object
posix_spawnattr_getsigdefault()
Get the “default signals” attribute of a spawn attributes object
posix_spawnattr_getsigignore()
Get the “ignored signals” attribute from a spawn attributes object
posix_spawnattr_getsigmask()
Get the signal mask attribute of a spawn attributes object
posix_spawnattr_getstackmax()
Get the maximum stack size attribute from a spawn attributes object
posix_spawnattr_getxflags()
Get the POSIX flags and the QNX Neutrino extended flags from a spawn attributes object
posix_spawnattr_init()
Initialize a spawn attributes object
posix_spawnattr_setcred()
Set the user and group ID attributes in a spawn attributes object
posix_spawnattr_setflags()
Set the POSIX flags in a spawn attributes object
posix_spawnattr_setnode()
Set the remote node attribute in a spawn attributes object
posix_spawnattr_setpgroup()
Set the process group attribute in a spawn attributes object
posix_spawnattr_setrunmask()
Set the runmask attribute in a spawn attributes object
posix_spawnattr_setschedparam()
Set the scheduling parameters attribute of a spawn attributes object
posix_spawnattr_setschedpolicy()
Set the scheduling policy attribute of a spawn attributes object
posix_spawnattr_setsigdefault()
Set the “default signals” attribute of a spawn attributes object
posix_spawnattr_setsigignore()
Set the “ignored signals” attribute of a spawn attributes object
posix_spawnattr_setsigmask()
Set the signal mask attribute of a spawn attributes object
posix_spawnattr_setstackmax()
Set the maximum stack size attribute in a spawn attributes object
posix_spawnattr_setxflags()
Set the POSIX flags and the QNX Neutrino extended flags in a spawn attributes object
remque()
Remove an element from a doubly linked queue.
RMSK_CLR(), RMSK_ISSET(), RMSK_SET(), and RMSK_SIZE()
You can use these macros to work with the runmask for the _NTO_TCTL_RUNMASK_GET_AND_SET_INHERIT command for ThreadCtl(). For more information, see the entry for ThreadCtl().
strptime()
Convert a string into a time.

Deprecated content

rsrcdbmgr_query()
Use rsrcdbmgr_query_name() instead.
sctp_bindx()
Add or remove one or more addresses from a given association.
sctp_connectx()
Help associate an endpoint that is multi-homed.
sctp_freeladdrs()
Free all resources allocated by sctp_getladdrs().
sctp_freepaddrs()
Free all resources allocated by sctp_getpaddrs().
sctp_getladdrs()
Return all locally bound addresses on a socket.
sctp_getpaddrs()
Return all peer addresses in an association.
sctp_peeloff()
Branch off an association into a separate socket.
SCTP
Stream Control Transmission Protocol.
sctp_recvmsg()
Receive message using advanced SCTP features.
sctp_sendmag()
Send message using advanced SCTP features.

Changed content

aio_cancel(), aio_error(), aio_fsync(), aio_read(), aio_return(), aio_suspend(), aio_write(), aiocb
These functions are now fully implemented and documented.
_amblksiz
We've described how you can change the value of this variable.
asyncmsg_channel_create(), asyncmsg_channel_destroy(), asyncmsg_connect_attach(), asyncmsg_connect_attr(), asyncmsg_connect_detach(), _asyncmsg_connection_attr, asyncmsg_flush(), asyncmsg_free(), asyncmsg_get(), asyncmsg_malloc(), asyncmsg_put(), asyncmsg_putv()
We've improved the documentation for asynchronous messaging.

Caution: Asynchronous messaging is an experimental feature; for information about the use of experimental software, see the Commercial Software License Agreement (CSLA) or Partner Software License Agreement (PSLA) in the Licensing area of our website, http://www.qnx.com/legal/licensing/.

encrypt()
This function now lets you encrypt or decrypt the given string, depending on the flags argument. It isn't safe to call this function from a signal handler or from a multithreaded program.
errno
getaddrinfo(), gethostbyname()
If a name server isn't responding, there's a timeout of 1.5 minutes per name server.
getcwd()
If you call getcwd( NULL, 0), this function allocates a buffer for the name of the directory. POSIX doesn't specify this behavior, but it's common practice.
ioctl()
We've added a summary of how ioctl() commands map to other function calls and devctl() commands.
malloc()
This entry now describes the environment variables that you can use to control the allocator's behavior.
mq_timedreceive(), mq_timedsend()
These functions set errno to EINVAL if the process or thread would have blocked, and the abs_timeout parameter specified a nanoseconds field value less than zero or greater than or equal to 1000 million.
procmgr_event_notify()
Now describes the PROCMGR_EVENT_CONFSTR and PROCMGR_EVENT_SYSCONF events.
pthread_attr_init()
We've updated the description of the default thread attributes. The names of the members of the pthread_attr_t now start with two underscores (__) in order to conform to POSIX.
pthread_cond_timedwait(), pthread_cond_wait()
In order to conform to POSIX, these functions now return EPERM instead of EINVAL if the current thread doesn't own the mutex.
pthread_mutex_init()
If you destroy a mutex by calling pthread_mutex_destroy(), don't reuse it without reinitializing it first.
pthread_mutex_timedlock()
This function now returns EOWNERDEAD if the owner of the lock died while holding it.
pthread_mutexattr_init()
The names of the members of the pthread_mutexattr_t now start with two underscores (__) in order to conform to POSIX.
pulse_attach()
We've added more information about the handler function.
readdir()
A returned value of NULL from this function is ambiguous; if you need to determine if it indicates an error (as opposed to the end of the directory stream), set errno to EOK before each call to this function.
rsrcdbmgr_attach()
The description of the rsrc_request_t structure now includes the RSRCDBMGR_FLAG_NAME and RSRCDBMGR_FLAG_LIST flags, and the name member.
rsrcdbmgr_create()
The description of the rsrc_alloc_t structure now includes the name member.
shm_ctl(), shm_ctl_special()
These functions have a new flag, SHMCTL_LAZY. Setting this flag delays allocating memory until it's referenced. If you create anonymous shared memory objects (by calling mmap() with MAP_ANON | MAP_SHARED and a file descriptor of -1), a MAP_LAZY flag implicitly sets the SHMCTL_LAZY flag on the object.

The shm_ctl_special() function also has new special flags for PPC and ARM platforms.

sigevent
The thread that receives a sigevent of type SIGEV_SIGNAL_THREAD depends on the functions associated with the sigevent.
socketpair()
The example of this function now points out that if you write to fd[0], you read from fd[1], and vice versa.
spawn(), spawnp()
The first three entries (if specified) of the fd_map argument become the child process's standard input, standard output, and standard error (stdin, stdout, and stderr).
spawn*()
There's a new SPAWN_PADDR64_SAFE flag that permits the selective application spawn of a task that's known to operate safely with 64-bit addressing or doesn't care about the physical memory location.
SyncTypeCreate()
The names of the members of the sync_t now start with two underscores (__) in order to conform to POSIX.
sysctl()
We've added instructions for determining the entries of the name array. For a list of commonly used variables, see the entry for sysctl in the Utilities Reference

Errata

abort()
We've corrected the description of what this function does.
accept()
This function gives an error of EINVAL if you called accept() on a socket that you hadn't called listen() on.
bind()
This function sets errno to ENOTSOCK if the given file descriptor isn't for a socket.
brk()
Neutrino doesn't support swapping.
ClockCycles()
It is safe to call this function from an interrupt handler.
ConnectAttach(), ConnectAttach_r()
These functions can give an error of ENXIO.
struct dirent
The d_name member is defined as an array of one character; you have to allocate space for the name.
dlopen()
The runtime library search path specified by the -rpath option to ld is stored in the binary, not in an environment variable.
GETIOVBASE(), GETIOVLEN()
You need to include <sys/types.h>, or else you'll get errors when you compile because iov_t isn't defined.
InterruptAttach()
The documentation for this function no longer implies that Neutrino supports paging.
iofunc_fdinfo_default()
We've corrected the description of what this function returns.
iofunc_notify()
This function returns -1 on success to indicate to the resource manager library that it should return a one-part IOV to the client.
iofunc_openfd()
This function uses _IO_FLAG_* bits, not O_RDONLY, etc.
iofunc_lseek(), iofunc_lseek_default()
We've corrected the description of what these functions return.
iofunc_notify_trigger()
If the specified count is greater than or equal to the trigger count for the particular notification list element, this function calls MsgDeliverEvent() to deliver the event to the client.
malloc()
We've corrected the description of _amblksiz in the documentation for malloc().
mbsrtowcs(), mbstowcs()
The n argument to these functions is the number of wide characters, not the number of bytes.
mem_offset()
This function gives an error of EOVERFLOW (not E2BIG) if the address is too large for the 32-bit off_t.
mq_send()
If the number of elements on the specified queue is equal to its mq_maxmsg, and O_NONBLOCK wasn't set (in the oflag argument to mq_open()), the call to mq_send() blocks.
msync()
name_attach()
name_close()
This function operates on a side-channel connection ID, not a file descriptor.
name_open()
This function doesn't attach to a name; it searches for the given name.
pathmgr_symlink()
The order of the arguments is now correct.
posix_mem_offset(), posix_mem_offset64()
We corrected the description of the contig_len argument.
posix_typed_mem_open()
The tflag argument is of type int.

We've corrected the details about the resolution of the name of the typed memory object.

pthread_barrier_wait()
This function returns PTHREAD_BARRIER_SERIAL_THREAD to one of the threads waiting at a barrier.
pthread_cond_timedwait()
We've corrected the example so that it runs correctly for timeouts of less than 1 second.
pthread_getname_np(), pthread_setname_np()
You don't have to be root in order to get or set a thread's name.
pthread_mutexattr_init()
We corrected the synopsis of this function.
pthread_mutex_lock()
You can allow recursive behavior by using pthread_mutexattr_setrecursive() to set the attribute to PTHREAD_RECURSIVE_ENABLE after calling pthread_mutex_init().
readdir_r()
This function doesn't set errno; it returns any error codes.
resmgr_context_t
The info member of this structure is a _msg_info structure, not a pointer to one.
resmgr_handle_tune()
This function is declared in <sys/resmgr.h>.
resmgr_io_funcs_t
We corrected the name and definition of the openfd member.
resmgr_iofuncs()
This function is declared in <sys/resmgr.h>, not <resmgr.h>.
_RESMGR_NPARTS()
This macro returns the negative of the number of parts (to distinguish the number from error codes that the resource manager's handler functions might return).
sbrk()
Neutrino doesn't support swapping.
SETIOV()
You need to include <sys/types.h>, or else you'll get errors when you compile because iov_t isn't defined.
shm_open()
You can't open shared memory across the network.
sigprocmask()
The classification for this function is POSIX 1003.1 CX.
snprintf(), sprintf(), sscanf(), swprintf(), swscanf()
It's safe to call these functions in a signal handler if the data isn't floating point.
socket()
This function sets errno to EAFNOSUPPORT if the specified address family isn't supported.
spawn()
We've corrected the description of the SPAWN_CHECK_SCRIPT flag in the inheritance structure.
SYSPAGE_ENTRY()
The sec variable in the example is now a double instead of a float.
timer_create()
We've corrected the description of CLOCK_SOFTTIME.
TimerTimeout()
The timeout value starts timing out when TimerTimeout() is called, not when the blocking state is entered. It might be possible to get preempted after calling TimerTimeout() but before the blocking kernel call.
wcstol(), wcstoll(), wcstoul(), wcstoull()
These functions are declared in <wchar.h>, not <stdlib.h>.

What's new in QNX Neutrino 6.3.2?

The changes in QNX Neutrino 6.3.2 include the following:

Errata

clock()
This function returns the number of clock ticks, or (clock_t) -1 if the number of ticks couldn't be determined or exceeds the maximum value that the clock_t type can represent.
GETIOVBASE(), GETIOVLEN()
The argument to these macros is a pointer to an iov_t structure.

What's new in the QNX Neutrino Core OS 6.3.2?

The changes in the QNX Neutrino Core OS 6.3.2 include the following:

New entries

posix_typed_mem_get_info(), posix_typed_mem_open()
New functions for POSIX support of memory-mapping.
pthread_getname_np(), pthread_setname_np()
The pthread_getname_np() function retrieves the name of a thread. The pthread_setname_np() function names a thread in your application.
pthread_attr_getstackprealloc(), pthread_attr_setstackprealloc()
Get and set the memory to preallocate for a MAP_LAZY stack.
munmap_flags()
New function to unmap previously mapped addresses exercising more control.
SchedCtl()
Control the adaptive partitioning scheduler
SIGEV_CLEAR_CRITICAL()
In adaptive partitioning, make a thread run as noncritical. See sigevent.
SIGEV_GET_TYPE()
Determine the type of a sigevent event. See sigevent.
SIGEV_MAKE_CRITICAL()
In adaptive partitioning, make a thread run as critical. See sigevent.

Changed content

ChannelCreate()
If you're using adaptive partitioning and you set _NTO_CHF_FIXED_PRIORITY, the receiving thread won't run in the sending thread's partition.
getrlimit(), getrlimit64(), setrlimit(), setrlimit64()
Added the following resources:
iofunc_open_default()
The documentation now describes the extra argument.
mlock(), mlockall(), munlock()
The documentation now describes the POSIX support for memory mapping.
mmap()
The documentation now includes a new MAP_NOINIT flag.
msync()
The documentation now describes new MS_CACHE_ONLY flag.
posix_mem_offset(), posix_mem_offset64()
The documentation now describes the POSIX support for memory-mapping.
sigevent
In the future, the library might use hidden bits in the sigev_notify member of the sigevent structure. Don't compare this member directly to values such as SIGEV_PULSE; use the SIGEV_GET_TYPE() macro.
spawn()
The documentation now describes the SPAWN_EXPLICIT_CPU flag and the runmask member of the inheritance structure.
ThreadCtl()
The documentation now contains the following commands:

What's new in QNX Neutrino 6.3.0 Service Pack 2?

The changes in QNX Neutrino 6.3.0 SP2 include the following:

New entries

cache_fini()
Free cache-coherency resources when the driver is unloaded.
CACHE_FLUSH()
Flush cache line associated to a data buffer.
cache_init()
Register with the cache coherency library.
CACHE_INVAL()
Invalidate cache line associated to a data buffer.

Changed content

mq_close(), mq_getattr(), mq_notify(), mq_open(), mq_receive(), mq_send(), mq_setattr(), mq_timedreceive(), mq_timedsend(), mq_unlink()
Added information about the traditional (mqueue) and alternate (mq) implementations of message queues.
nanospin(), nanospin_calibrate(), nanospin_count(), nanospin_ns(), nanospin_ns_to_count()
The nanospin*() functions are designed for use with hardware that requires short time delays between accesses. You should use them to delay only for times less than a few milliseconds. For longer delays, use the POSIX timer_*() functions.
pci_attach_device(), pci_find_class(), pci_find_device()
For a list of supported device and vendor IDs, see <hw/pci_devices.h>; for a list of class and subclass codes, see <hw/pci.h>.

Errata

_cmdname()
Corrected the information about what this function returns.
openlog()
Corrected the name of the LOG_FTP facility.
pci_attach_device()
The BusNumber and DevFunc members of the pci_dev_info structure are input/output.
pci_irq_routing_options()
This function is for x86 only.
sem_close(), sem_open(), sem_unlink()
Named semaphores are now managed by procnto, not mqueue.
thread_pool_create()
The description of the block_func member of the thread_pool_attr_t structure has been corrected.
vfprintf(), vprintf()
The code samples now compile without warnings.

What's new in QNX Neutrino 6.3.0 Service Pack 1?

The changes in QNX Neutrino 6.3.0 SP1 include the following:

New entries

asyncmsg_channel_create()
Create an asynchronous message channel.
asyncmsg_channel_destroy()
Destroy an asynchronous message channel.
asyncmsg_connect_attach()
Establish a connection between a process and a channel.
asyncmsg_connect_attr()
Return the original connection attributes.
asyncmsg_connect_detach()
Break a connection between a process and a channel.
asyncmsg_flush()
Flush the messages sent through the connection.
asyncmsg_free()
Free a message buffer.
asyncmsg_get()
Receive an asynchronous message.
asyncmsg_malloc()
Allocate a message buffer for sending.
asyncmsg_put(), asyncmsg_putv()
Send asynchronous messages to a connection.
shm_ctl_special()
Give special attributes to a shared memory object

Changed content

getdomainname()
If the buffer isn't large enough, getdomainname() truncates the domain name.
getgrouplist()
The Neutrino implementation of this function ignores the basegid argument.
mallopt()
The MALLOC_CKACCESS, MALLOC_FILLAREA, and MALLOC_CKCHAIN options were added to this call.
MsgReply(), MsgReply_r(), MsgReplyv(), MsgReplyv_r()
The MsgSend*_r() functions use negative errno values to indicate failure, so you shouldn't pass a negative value for the status to MsgReply*(), because the MsgSend*_r() functions could interpret it as an error code.
name_attach()
The example now handles an _IO_CONNECT message.
nanospin(), nanospin_ns(), and nanospin_ns_to_count()
The first time that you call these functions, the C library invokes nanospin_calibrate() with an argument of 0 (interrupts enabled), unless you call it directly first.
pci_attach_device()
Added PCI_MASTER_ENABLE to the flags.
procmgr_daemon()
The data in the siginfo_t structure for the SIGCHLD signal that the parent receives isn't useful in this case.
rsrcdbmgr_create()
Added RSRCDBMGR_FLAG_NOREMOVE to the flags.
setenv()
This function doesn't free any memory. If you want to change the value of an existing environment variable, you should use putenv() instead.
sigevent
If you don't want to modify the priority of the thread that receives the pulse, specify SIGEV_PULSE_PRIO_INHERIT for the priority when you call SIGEV_PULSE_INIT().
spawn(), spawnp()

Errata

getsubopt()
Corrected the example.
mq_notify()
Don't use SIGEV_INTR as an event type.
pause()
This function suspends the calling thread, not the process, until delivery of a signal.
pthread_setschedparam()
regexec()
Corrected the description of the regmatch_t structure.
sched_get_priority_max(), sched_get_priority_min(), sched_setscheduler(), SchedInfo(), SchedSet()
The timeslice for round-robin scheduling (SCHED_RR) is 4 × the clock period.
sched_setscheduler(), SchedSet()
You can specify sporadic scheduling at any time, not just when you create a thread.
spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe()
The child process can't access the parent process's environment, only its own.

What's new in QNX Neutrino 6.3.0?

The changes in QNX Neutrino 6.3.0 include the following:

New entries

fopen64()
Large-file support for fopen().
freopen64()
Large-file support for freopen().
ftw64()
Large-file support for ftw().
getnameinfo()
Perform address-to-nodename translation.
inet6_option_alloc()
Append IPv6 hop-by-hop or destination options to an ancillary data object
inet6_option_append()
Append an IPv6 hop-by-hop or destination option to an ancillary data object
inet6_option_find()
Search for IPv6 hop-by-hop and destination options
inet6_option_init()
Initialize an ancillary data object that contains IPv6 hop-by-hop and destination options
inet6_option_next()
Find the next IPv6 hop-by-hop or destination option
inet6_option_space()
Determine how much space an IPv6 hop-by-hop or destination option requires
inet6_rthdr_add()
Add an address to an IPv6 routing header
inet6_rthdr_getaddr()
Get a pointer to an IPv6 address in the routing header
inet6_rthdr_getflags()
Get the flags for a segment in an IPv6 routing header
inet6_rthdr_init()
Initialize an IPv6 routing header
inet6_rthdr_lasthop()
Specify the Strict/Loose flag for the final hop of an IPv6 routing header
inet6_rthdr_reverse()
Reverse the list of addresses in an IPv6 router header
inet6_rthdr_segments()
Count the segments in an IPv6 routing header
inet6_rthdr_space()
Determine the space required by an IPv6 routing header
ipsec_dump_policy()
Generate a readable string from an IPsec policy specification.
ipsec_get_policylen()
Get the length of the IPsec policy.
ipsec_set_policy()
Generate an IPsec policy specification structure from a readable string.
nftw(), nftw64()
Walk a file tree and its large-file support.
poll()
Input/output multiplexing.
resmgr_handle_tune()
Tune aspects of client fd-to-OCB mapping
sctp_bindx()
Add or remove one or more addresses from a given association.
sctp_connectx()
Help associate an endpoint that is multi-homed.
sctp_freeladdrs()
Free all resources allocated by sctp_getladdrs().
sctp_freepaddrs()
Free all resources allocated by sctp_getpaddrs().
sctp_getladdrs()
Return all locally bound addresses on a socket.
sctp_getpaddrs()
Return all peer addresses in an association.
sctp_peeloff()
Branch off an association into a separate socket.
SCTP
Stream Control Transmission Protocol.
sctp_recvmsg()
Receive message using advanced SCTP features.
sctp_sendmag()
Send message using advanced SCTP features.
tmpfile64()
Large-file support for tmpfile().

Deprecated content

Instead of: Use:
drem() remainder()
dremf() remainder()
finite() isfinite()
finitef() isfinite()
isinff() isinf()
isnanf() isnan()
significand() scalbn( x, -ilogb( x ))
significandf() scalbnf( x, -ilogbf( x ))
scalbf() scalbn()

What's new in QNX Neutrino 6.2.1?

The changes in QNX Neutrino 6.2.1 include the following:

New entries

dispatch_unblock()
Unblock all of the threads that are blocked on a dispatch handle
errno
Each thread in a multi-threaded program has its own error value in its thread local storage. No matter which thread you're in, you can simply refer to errno — it's defined in such a way that it refers to the correct variable for the thread. For more information, see Local storage for private data in the documentation for ThreadCreate().
pthread_attr_setschedpolicy().
Sporadic scheduling (SCHED_SPORADIC) is a new feature of QNX Neutrino 6.2.0.
sched_param
Structure of scheduling parameters
va_copy()
Make a copy of a variable argument list

Changed content

bind(), bindresvport()
These functions aren't cancellation points any more, because this conflicted with POSIX.
htonl(), htons(), inet_ntop(), inet_pton(), isfdtype(), ntohl(), ntohs()
These functions have been moved from libsocket to libc.

Errata

alphasort()
This function compares two directory entries; it doesn't sort an array of entries.
execlpe(), execvpe()
You can now execute a shell script.
fgetc(), fgetchar(), fgets(), fgetwc(), fgetws(), getc(), getc_unlocked(), getchar(), getchar_unlocked(), gets(), getw(), getwc(), getwchar()
Use feof() or ferror() to distinguish an end-of-file condition from an error.
fstat(), fstat64()
These functions return -1 if an error occurs.
iofunc_mmap(), iofunc_mmap_default()
These functions return a nonpositive value on success.
InterruptAttach(), InterruptAttachEvent()
You should always set _NTO_INTR_FLAGS_TRK_MSK.
mq_getattr(), mq_setattr()
The mq_flags member of the mq_attr structure applies to the message-queue description (i.e. locally), not to the queue as a whole.
mq_open()
Corrected the interpretation of the name argument.
MsgError(), MsgError_r()
If the error argument is EOK, the MsgSend*() call returns EOK; if error is any other value, the MsgSend*() call returns -1.
MsgSendPulse(), MsgSendPulse_r()
You can now send pulses across the network.

You can send a pulse to any process — not just to a process in the same process group — if your process has the appropriate permission.

name_open()
This function returns a nonnegative integer representing a side-channel connection ID, or -1 if an error occurred.
printf()
The exponent produced for the e and E formats is at least two digits long.

Clarified what happens if the format string includes invalid multibyte characters.

pthread_mutex_timedlock(), pthread_rwlock_timedrdlock(), pthread_rwlock_timedwrlock()
The timeout is based on the CLOCK_REALTIME clock.
_resmgr_ocb()
Corrected the name; see resmgr_ocb().
select()
This function and the associated macros are now defined in <sys/select.h>, instead of <sys/time.h> (which includes <sys/select.h>).
sem_open()
Corrected the interpretation of the sem_name argument.
sem_timedwait()
The timeout is based on the CLOCK_REALTIME clock.
send()
The list of errors now includes EPIPE.
shm_open()
Corrected the interpretation of the name argument.
sigaction()
Corrected the example (it isn't safe to call printf() in a signal handler).
spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe()
You can now execute a shell script.

The child process's tms_utime, tms_stime, tms_cutime, and tms_cstime are now calculated.

timer_create()
Don't use SIGEV_INTR or SIGEV_UNBLOCK for the event type.
vsnprintf()
Corrected the returned values.

What's new in QNX Neutrino 6.2?

The changes in QNX Neutrino 6.2 include the following:

New entries

addrinfo
TCP/IP address information
dircntl()
Control an open directory
freeaddrinfo()
Free an address information structure
freeifaddrs()
Free an address information structure
gai_strerror()
Return the getaddrinfo() error code
getaddrinfo()
Get address information
getdomainname()
Get the domain name of the current host
gethostbyname2()
Get a network host entry, given a name
getifaddrs()
Get a network interface address
hwi_find_item()
Find an item in the hwi_item structure
hwi_find_tag()
Find a tag in the hwi_item structure
hwi_off2tag()
Return a pointer to the start of a tag in the hwinfo area of the system page
hwi_tag2off()
Return the offset from the start of the hwinfo area of the system page
ICMP6
Internet Control Message Protocol for IPv6
if_freenameindex()
Free dynamic memory allocated by if_nameindex()
if_indextoname()
Map an interface index to its name
if_nameindex()
Return a list of interfaces
if_nametoindex()
Map an interface name to its index
ifaddrs()
Structure that describes an Internet host
INET6
Internet Protocol version 6 family
inet_net_ntop()
Convert an Internet network number to CIDR format
inet_net_pton()
Convert an Internet network number from CIDR format to network format
IPv6
Internet Protocol version 6
IPsec
Internet security protocol
mallinfo()
Get memory allocation information
mallopt()
Control the memory allocation
mcheck()
Enable memory allocation routine consistency checks
memalign()
Allocate aligned memory
mprobe()
Perform consistency check on memory
posix_memalign()
Allocate aligned memory
procmgr_session()
Provide process manager session support
_resmgr_handle_grow()
Expand the capacity of the device manager database; see resmgr_handle_grow()
_resmgr_io_func()
Retrieve an I/O function from an I/O function table
resmgr_iofuncs()
Extract the I/O function pointers associated with client connections
_resmgr_ocb()
Retrieve an Open Control Block; see resmgr_ocb().
sched_get_priority_adjust()
Calculate the allowable priority for the scheduling policy
seekdir()
Set the position for the next read of the directory stream
_sleepon_broadcast()
Wake up multiple threads
_sleepon_destroy()
Destroy a sleepon
_sleepon_init()
Initialize a sleepon
_sleepon_lock()
Lock a sleepon
_sleepon_signal()
Wake up a single thread
_sleepon_unlock()
Unlock a sleepon
_sleepon_wait()
Wait on a sleepon
tcsetsid()
Make a terminal device a controlling device
strtoimax(), strtoumax()
Convert a string to an integer type
telldir()
Get the location associated with the directory stream
valloc()
Allocate a heap block aligned on a page boundary
wcstoimax(), wcstoumax()
Convert a wide-character string to an integer type

Deprecated content

Errata

snprintf()
Corrected the Returns section and Classifications

What's new in QNX Neutrino 6.1.0?

The changes in QNX Neutrino 6.1.0 include the following:

New entries

The following functions have been added:

Wide-character functions
Wide-character versions of many functions
InterruptHookTrace()
Attach the pseudo interrupt handler that's used by the instrumented module
iofdinfo()
Retrieve server attributes
iofunc_fdinfo()
Handle an _IO_FDINFO message
iofunc_fdinfo_default()
Default handler for _IO_FDINFO messages
MsgVerifyEvent(), MsgVerifyEvent_r()
Check the validity of a receive ID and an event configuration
resmgr_unbind()
Remove an OCB
straddstr()
Concatenate one string on to the end of another
SyncCtl(), SyncCtl_r()
Perform an operation on a synchronization object
SyncMutexEvent(), SyncMutexEvent_r()
Attach an event to a mutex
SyncMutexRevive(), SyncMutexRevive_r()
Revive a mutex
thread_pool_control()
Control the thread pool behavior
thread_pool_limits()
Wrapper function for thread_pool_control()
TraceEvent()
Trace kernel events

Deprecated content

matherr()
Handle errors in math library functions