Caution: This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs.

Appendix: What's New in this Reference?

This appendix includes:

What's new in QNX Neutrino 6.4.1?

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?

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()
Spawn a process.
posix_spawn_file_actions_addclose()
Add (or delete) a close action to a spawn file actions object.
posix_spawn_file_actions_adddup2()
Add the dup2() action to spawn file actions object.
posix_spawn_file_actions_addopen()
Adds an open action to the object referenced that causes the file named by the path to be opened.
posix_spawn_file_actions_destroy(),
Destroy a spawn file actions object.
posix_spawn_file_actions_init()
Initialize the spawn file actions object.
posix_spawnattr_addpartid()
Specify a resource partition that the spawned process should be associated with.
posix_spawnattr_addpartition()
Add a resource partition to the spawned process.
posix_spawnattr_destroy()
Destroy the spawn attributes object.
posix_spawnattr_getflags()
Get the spawn-flags attribute of a spawn attributes object.
posix_spawnattr_getnode()
Gets the remote node used to perform the spawn.
posix_spawnattr_getpartid()
Retrieve the partition identifiers currently set in the posix_spawnattr_t object.
posix_spawnattr_getpgroup()
Get the spawn-pgroup attribute of a spawn attributes object.
posix_spawnattr_getrunmask()
Gets a bit mask of processors on which to run the spawned program.
posix_spawnattr_getschedparam()
Get the spawn-schedparam attribute of a spawn attributes object.
posix_spawnattr_getschedpolicy()
Get the spawn-schedpolicy attribute of a spawn attributes object.
posix_spawnattr_getsigdefault()
Get the spawn-sigset_p attribute of a spawn attributes object.
posix_spawnattr_getsigignore()
Gets signals that should be ignored by the spawned process.
posix_spawnattr_getsigmask()
Get the spawn-sigmask attribute of a spawn attributes object.
posix_spawnattr_getstackmax()
Get the maximum stack size for a spawned process.
posix_spawnattr_getxflags()
Get the possible attribute flags that can be set when a process is spawned.
posix_spawnattr_init()
Initialize the spawn attributes object.
posix_spawnattr_setflags()
Set the spawn-flags attribute of a spawn attributes object.
posix_spawnattr_setnode()
Sets the remote node used to perform the spawn.
posix_spawnattr_setpgroup()
Set the spawn-pgroup attribute of a spawn attributes object.
posix_spawnattr_setschedparam()
Sets a bit mask of processors on which to run the spawned program.
posix_spawnattr_setrunmask()
Set the spawn-schedpolicy attribute of a spawn attributes object.
posix_spawnattr_setschedpolicy()
Set the spawn-sigset_p attribute of a spawn attributes object.
posix_spawnattr_setsigdefault()
Sets signals that will be ignored by the spawned process.
posix_spawnattr_setsigignore()
Set the spawn-sigmask attribute of a spawn attributes object.
posix_spawnattr_setsigmask()
Set the spawn-sigmask attribute of a spawn attributes object.
posix_spawnattr_setstackmax()
Set the maximum stack size for a spawned process.
posix_spawnattr_setxflags()
Set the possible attribute flags that can be set when a process is spawned.
posix_spawnp()
Spawn a process (using executable name).
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_ALLOW 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?

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?

Significant changes:

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?

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?

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?

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?

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?

Significant changes:

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 the QNX Neutrino 6.1.0 docs?

Significant changes:

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