This appendix describes the updates to this document in the following
releases:
The changes in QNX Neutrino 6.5.0 include the following:
- 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_GETEVENT_C(), _NTO_TRACE_GETEVENT(),
  _NTO_TRACE_GETCPU(), _NTO_TRACE_SETEVENT_C(),
  _NTO_TRACE_SETEVENT()
 
- Macros for use with the header of a trace event.
  For more information, see
  “Macros for use with the event header”
  in the entry for TraceEvent().
 
- 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
 
- 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.
  
  
  | 
  You'll need to update and recompile any code that calls this function.
   | 
 
 
- atan(),
  atanf(),
  atanhl()
 
- For finite values of |x| > 1, these functions return NaN.
  The return value for +/-Inf is NaN.
 
- aio_cancel()
 
- The documentation now says that
  if aiocbptr isn't NULL, aio_cancel()
  ignores the fildes argument and attempts to cancel the I/O
  operation specified by the aiocb control block.
  The operation isn't canceled if it's already in progress.
  
  This function indicates an error of EINVAL if
  the control block that aiocbptr points to isn't
  valid (i.e. it hasn't yet been used in any call to
  aio_read() or aio_write()).
  
 
- aio_read(),
  aio_write()
 
- The documentation now says that
  the asynchronous operation is submitted at the scheduling priority of
  the thread minus aiocbp->aio_reqprio.
  
  If synchronized I/O is enabled on the file associated with
  aiocbptr->aio_fildes, these functions behave in
  accordance with the definitions of synchronized I/O data integrity
  completion and synchronized I/O file integrity completion.
  
 
 
- asyncmsg_malloc(),
  calloc(),
  iofunc_lock_calloc(),
  malloc(),
  memalign(),
  realloc(),
  valloc()
 
- Because the malloc() implementation uses signed, 32-bit
  integers to represent the size internally,
  you can't allocate more than 2 GB in a single allocation.
  If the size is greater than 2 GB, these functions indicate an error
  of ENOMEM.
  
 
- bind()
 
- Before calling bind() on an AF_INET socket,
  set the af_family member of the sockaddr
  structure to AF_INET.
  Up until QNX Neutrino 6.4.0, a value of 0 was accepted and assumed to be
  this value.
  
 
- CACHE_FLUSH(),
  CACHE_INVAL()
 
- Before using the CACHE_*() macros
  on ARM and MIPS platforms,
  the calling thread must obtain I/O privileges by calling:
ThreadCtl( _NTO_TCTL_IO, 0 );
 
- ChannelCreate()
 
- We've added some sample code that you can use to check for stale
  _PULSE_CODE_COIDDEATH pulses.
  
 
- ClockTime()
 
- If you call ClockTime() to set the time of day, the kernel
  checks to see if the SYSPAGE_ENTRY(qtime)->boot_time
  field is zero.
  If it is, the kernel sets it to the appropriate value.
  
 
- confstr()
 
- We've described the _CS_LOCALE configuration string.
  
 
- ConnectAttach()
 
- We've added EINVAL, EMFILE, and
  ENOREMOTE to the list of error codes.
  
 
- ConnectClientInfo()
 
- The sid member of the _client_info structure
  is used internally by Qnet.
  
 
- ConnectServerInfo()
 
- We've documented the flags field of the
  _server_info structure.
  
  If the info argument is NULL,
  ConnectServerInfo() ignores connections with dead servers and
  skips to the next coid.
  If info is non-NULL, the function fills in
  the _server_info structure;
  for connections with dead servers, it turns on the
  _NTO_COF_DEAD bit in the flags field of the
  structure.
  
 
- cos(),
  cosf(),
  cosl()
 
- When x is +/-Inf, these functions return NaN.
 
- daemon()
 
- The High Availability Manager now automatically switches to monitoring
  the new process that daemon() creates, if the original process
  was a self-attached entity.
  
 
- dlopen()
 
- RTLD_LAZY is now implemented.
  For details about it, see
  “Lazy loading”
  in the Compiling and Debugging chapter of the
  QNX Neutrino Programmer's Guide.
  
 
- erfc(),
  erfcf(),
  erfcl()
 
- For a correct value that would cause an underflow, these functions
  return 0.0.
 
- execl(),
  execle(),
  execlp(),
  execlpe(),
  execv(),
  execve(),
  execvp(),
  execvpe()
 
- These functions can give an error of ETXTBSY if the
  text file that you're trying to execute is busy (e.g. it might
  be open for writing).
  
  
 
- The documentation for these functions now mentions that any
    memory locked by the calling process is unlocked.
    
  
 
 
- exp(),
  expf(),
  expl()
 
- For a correct value that would cause an underflow, these functions
  return 0.0.
 
- fclose()
 
- We've described the main error codes associated with this function.
 
- fcntl()
 
- This function indicates an error of EINVAL if the
  cmd argument is invalid.
  
  
  The documentation now includes the following values for cmd:
  
- F_ALLOCSP64
  
 
- F_FREESP64
  
 
- F_GETLK64
  
 
- F_SETLK64
  
 
- F_SETLKW64
  
 
 
- fflush()
 
- We've described the main error codes associated with this function.
 
- fgetc()
 
- We've described the main error codes associated with this function.
 
- fork()
 
- The documentation for this function now mentions that the child process
  doesn't inherit any memory locks from the parent.
  
 
- fpathconf(),
  pathconf()
 
- We've described the following:
  
- _PC_ASYNC_IO
  
 
- _PC_LINK_DIR
  
 
- _PC_PRIO_IO
  
 
- _PC_SYNC_IO
  
 
  
 
- fputc()
 
- We've described the main error codes associated with this function.
 
- freopen()
 
- This function indicates an error of EBADF if
  the underlying file descriptor is invalid or doesn't support the
  requested mode change.
  
  
  We've listed the changes of mode that the Neutrino version of this
  function permits.
 
- fseek(), fseeko()
 
- We've listed the errors that these functions can indicate.
  
  
  As a QNX Neutrino extensions, these functions give an error of
  ENOSYS if the underlying device is incapable of seeking.
 
- fstatvfs(),
  statvfs()
 
- The values of the f_files, f_ffree, and
    f_favail members of the statvfs structure
    depend on the filesystem.
  
 
- We've updated the list of possible bits in the f_flags
    member.
  
 
- The filesystem ID is currently the device ID.
  
 
  
 
- getsockopt()
 
- This entry now includes a section on setting the
  keepalive timing.
  
 
- glob()
 
- We've documented the following flags (which are NetBSD extensions):
  
- GLOB_PERIOD
  
 
- GLOB_MAGCHAR
  
 
- GLOB_ALTDIRFUNC
  
 
- GLOB_BRACE
  
 
- GLOB_NOMAGIC
  
 
- GLOB_TILDE
  
 
- GLOB_NO_DOTDIRS
  
 
- GLOB_LIMIT
  
 
  
 
- inbe16(),
  inle16(),
  inbe32(),
  inle32()
 
- Note that these macros access the
  specified port more than once if endian conversion is necessary.
  This could be a problem on some hardware.
  
 
- InterruptAttach(),
  InterruptAttachEvent()
 
- Note that it isn't safe to use floating-point operations in an
  Interrupt Service Routine (ISR).
  
 
- InterruptMask(),
  InterruptUnmask()
 
- These functions now give an error of ESRCH if
  the id parameter isn't something returned by
  InterruptAttach()
  or
  InterruptAttachEvent(),
  or -1.
  
 
- InterruptDetach()
 
- The thread that detaches an interrupt handler must be in the same process
  as the thread that attached it, or else this function indicates an error
  of EPERM.
  
 
- ioctl()
 
- We've made ioctl() compatible with other UNIX-based systems
  by enabling support for embedded pointers.
  This means that you no longer have to change calls to ioctl()
  into calls to ioctl_socket() in networking applications.
  As a result of this change, ioctl() can now indicate an error
  of ENOBUFS if there isn't enough memory available to copy
  the data that the embedded pointers refer to.
  
 
- ionotify()
 
- The documentation now states that this function enforces a
  restriction of one notification per message queue or resource manager.
  If a notification was already armed for the specified resource,
  ionotify() indicates an error of EBUSY.
  
 
- ldexp(),
  ldexpf(),
  ldexpl()
 
- For a correct value that would cause an underflow, these functions
  return 0.0.
 
- log(),
  logf(),
  logl()
 
- For finite values of x less than zero, these functions
  return NaN.
  The return value when x is -Inf is NaN.
 
- log10(),
  log10f(),
  log10l()
 
- For finite values of x less than zero, these functions
  return NaN.
  The return value when x is -Inf is NaN.
 
- log1p(),
  log1pf(),
  log1pl()
 
- For finite values of x less than -1, these functions
  return NaN.
  The return value when x is -Inf is NaN.
 
- mallopt()
 
- We've renamed MALLOC_FILLAREA to MALLOC_CKBOUNDS, and we've 
added more information about the MALLOC_CKALLOC, MALLOC_DUMP_LEAKS, 
MALLOC_EVENTBTDEPTH, MALLOC_FREE_CHECK, MALLOC_START_TRACING, 
MALLOC_STATS, MALLOC_TRACEBTDEPTH, MALLOC_TRACEMAX,
MALLOC_TRACEMIN, MALLOC_TRACING, and MALLOC_VERIFY_ON options.
  
 
- mem_offset()
 
- If the offset is greater than INT_MAX,
  mem_offset() gives an error of EOVERFLOW.
  Use mem_offset64() if this happens.
  
 
- message_attach()
 
- Note that although the low and high arguments
  are of type int, message_attach() stores
  the values internally as short.
  
 
- mkdir()
 
- We've described the behavior for the S_ISGID and
  S_ISVTX bits.
  
  Note that not all filesystems support the creation of directories.
  
 
- mlock(),
  mlockall(),
  munlock(),
  munlockall()
 
- For more information about locking, superlocking, and unlocking memory,
  see
  “Locking memory”
  in the Process Manager chapter of the System Architecture guide.
  
  
  There's no limit on the amount of memory that a process may lock,
  other than the amount of physical memory in the system.
 
- mmap()
 
- The off argument to mmap() can be a physical
  address (e.g. for mapping a device's registers in a resource manager).
  
 
- mq_open(),
  mq_unlink()
 
- These functions indicate an error of ENOSYS if
   the message queue manager
   (mq
   or
   mqueue)
   isn't running.
   
 
- MsgCurrent()
 
- The documentation now points out that if you call MsgCurrent()
  on the rcvid pertaining to a low-priority client, then the priority boost
  given to your thread by a blocked high-priority thread can be lost.
  
 
- MsgSend(),
  MsgSend_r(),
  MsgSendnc(),
  MsgSendnc_r(),
  MsgSendPulse(),
  MsgSendPulse_r(),
  MsgSendsv(),
  MsgSendsv_r(),
  MsgSendsvnc(),
  MsgSendsvnc_r(),
  MsgSendv(),
  MsgSendv_r(),
  MsgSendvnc(),
  MsgSendvnc_r(),
  MsgSendvs(),
  MsgSendvs_r(),
  MsgSendvsnc(),
  MsgSendvsnc_r()
 
- These functions can indicate an error of EHOSTDOWN or
  EHOSTUNREACH if (for example) a send across Qnet failed.
  
 
- MsgSendPulse()
 
- If you specify a priority of -1, the function uses the calling
  thread's priority as the pulse's priority.
  
  
 
- MsgSendPulse() gives an error of EINVAL
    if the specified priority is invalid (e.g. 0).
    
  
 
 
- pow(),
  powf(),
  powl()
 
- For finite values of x less than 0 and finite non-integer
  values of y, these functions return NaN.
  The return value for a correct value that would cause underflow is 0.0.
 
- procmgr_daemon()
 
- Note that the High Availability Manager (HAM) automatically monitors
  processes detached using procmgr_daemon() because they're
  in session 1.
  
 
- pthread_cond_timedwait()
 
- We've changed the example so that it uses CLOCK_MONOTONIC,
  which isn't affected by changes to the system time (unlike 
  the default, CLOCK_REALTIME).
  
 
- pthread_getschedparam()
 
- As a QNX extension, the policy argument to 
  pthread_getschedparam() can be NULL, in which
  case the function doesn't try to store the scheduling policy.
  
 
- pthread_mutex_lock()
 
- As a QNX Neutrino extension, this function can now return
  EINTR if the thread was unblocked by a call to
  pthread_mutex_wakeup_np().
  
 
- pthread_mutexattr_setrecursive()
 
- The
  pthread_mutexattr_settype()
  function provides a more portable way to make a mutex recursive.
  
 
- pthread_rwlock_rdlock()
 
- If another thread is currently waiting to acquire the read-write lock for
  writing, pthread_rwlock_rdlock() blocks.
  This can cause a deadlock if a thread attempts to recursively acquire the
  lock for reading, while another thread is trying to acquire the lock for
  writing.
  
 
- pthread_setname_np()
 
- This function gives an error of EBUSY when you're trying
  to name a thread other than the calling thread, and another program
  already has write access to the process's entry in the
  /proc filesystem.
  
 
- read()
 
- This function indicates an error of EIO if the
  filesystem resides on a removable media device, and the media has been
  forcibly removed.
 
- readdir()
 
- We've added more information about the dirent_extra and
  dirent_extra_stat structures that filesystems can provide
  as extra data.
  
 
- regexec()
 
- We've corrected the naming of the members from rm_sp 
and rm_ep to be rm_so and rm_eo 
respectively.
 
- remainder(),
  remainderf(),
   remainderl()
 
- If x is infinite or y is zero and
  the other is non-NaN, these functions return NaN.
 
- scalbn(),
  scalbnf()
 
- When a correct value would cause an underflow, these functions return 0.0.
 
- scanf()
 
- A - in the scanlist for the [ conversion
  specifier that isn't the first character,
  nor the second where the first character is a ^,
  nor the last character, defines a range of characters to be matched.
  This range consists of characters numerically greater than or equal to the
  character before the -, and numerically less than or equal to
  the character after the -.
  
  For the p conversion specifier,
  if the sequence contains more than 8 digits, the conversion is performed only
  on the last 8 digits in the sequence.
 
- send(),
  sendmsg(),
  sendto()
 
- These functions support the MSG_NOSIGNAL flag.
  Set it if you don't want to raise a SIGPIPE
  signal when the other end breaks the connection.
  
 
- shm_ctl(),
  shm_ctl_special()
 
- If you specify SHMCTL_PHYS in the flags, then
  paddr and size must be
  even multiples of the page size (sysconf(_SC_PAGE_SIZE)).
  
 
- sigaction(),
  signal(),
  SignalAction()
 
- Note that it isn't safe to use floating-point operations in a
  signal handler.
  
 
- SignalAction()
 
- QNX Neutrino uses the top eight signals for special purposes.
  They're always masked, and attempts to unmask them are ignored.
  They include 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()
 
- We've added more details about working with the
  fd_count and fd_map arguments to set up the
  file descriptors in the child process; see
  “Mapping file descriptors”
  in the entry for spawn().
  
  
 
- We've expanded the list of possible errors:
    
- ETXTBSY — the text file that you're trying
      to execute is busy (e.g. it might be open for writing).
      
    
 
- EINVAL — an argument is invalid (e.g.
      argv[0] is NULL).
      
    
 
- EINTR — the function was interrupted by a signal.
      
    
 
   
 
- spawnl(),
  spawnle(),
  spawnlp(),
  spawnlpe(),
  spawnv(),
  spawnve(),
  spawnvp(),
  spawnvpe()
 
- We've expanded the list of possible errors:
  
- ETXTBSY — the text file that you're trying
    to execute is busy (e.g. it might be open for writing).
    
  
 
- EINVAL — an argument is invalid.
    For example, argv[0] or arg0 (depending on which
    spawn*() function you use) is NULL, or
    the value of the mode argument is invalid.
    
  
 
- EINTR — the function was interrupted by a signal.
    
  
 
- ECHILD — the value of the mode
    argument is P_WAIT, and the child process terminated
    before the waitpid() was completed.
    
  
 
 
- sqrt(),
  sqrtf(),
  sqrtl()
 
- For finite values of x < -0, these functions return NaN.
  The return value when x is -Inf is NaN.
 
- SyncCtl()
 
- There's a new cmd argument, 
  _NTO_SCTL_MUTEX_WAKEUP, that's used to
  wake up any threads that are blocked on the specified mutex; see
  pthread_mutex_wakeup_np().
  
  | 
  Don't use the _NTO_SCTL_MUTEX_WAKEUP command directly.
   | 
 
  
 
- SyncMutexEvent()
 
- If you call SyncMutexEvent() with a NULL event,
  the function deletes any existing event registration.
  
 
- sysconf()
 
- We've described the following variables:
  
- _SC_AIO_PRIO_DELTA_MAX 
  
 
- _SC_DELAYTIMER_MAX 
  
 
- _SC_GETGR_R_SIZE_MAX 
  
 
- _SC_GETPW_R_SIZE_MAX 
  
 
- _SC_SEM_NSEMS_MAX 
  
 
- _SC_SIGQUEUE_MAX 
  
 
- _SC_THREAD_STACK_MIN 
  
 
- _SC_TZNAME_MAX 
  
 
  
- SYSPAGE_ENTRY()
 
- If you call ClockTime() to set the time of day, the kernel
  checks to see if the SYSPAGE_ENTRY(qtime)->boot_time
  field is zero.
  If it is, the kernel sets it to the appropriate value.
  
 
- tan(),
  tanf(),
  tanhl()
 
- For a correct value that would cause an underflow, these functions
  return 0.0.
 
- ThreadCtl()
 
- Not only does a _NTO_TCTL_IO command request I/O
  privileges, it also superlocks the process's memory.
  
  
 
- A lack of I/O privileges may cause a SIGILL signal.
    
  
 
 
- thread_pool_attr_t
 
- This structure — described in the entry for
  thread_pool_create()
  — now has a tid_name entry that you can use to specify
  a name to use for the threads in the pool.
  
 
- timer_create()
 
- This function fails if the clock ID corresponds to the CPU-time clock
  of a process or thread different from the process or thread invoking the
  function.
 
- timer_settime()
 
- The documentation now says that this function rounds up time values
  that are between two consecutive nonnegative integer multiples of the
  resolution of the specified timer to the larger multiple of the resolution.
  
 
- tmpnam()
 
- After TMP_MAX names have been generated,
  this function reuses names that have been previously generated:
  
- If a file with the new name doesn't exist, the new name is returned.
 
- If a file with the new name does exist, a default pathname with a
    basename of 000000 is returned.
 
 
- TraceEvent()
 
- We've updated and expanded the entry for this function:
  
- We've updated the list of event classes.
  
 
- In order to set up the dynamic rules filter, your application must call
    ThreadCtl()
    with the _NTO_TCTL_IO flag to get I/O privileges.
  
 
- We've expanded the description of the event_data_t
    structure.
    Note that you need to provide space for the data_array
    member of this structure.
  
 
- We've described the _NTO_TRACE_GET*() and
    _NTO_TRACE_SET*() macros, which you can use to work with
    event headers.
  
 
  
 
- traceparser(),
  traceparser_cs(),
  traceparser_cs_range(),
  traceparser_debug(),
  traceparser_destroy(),
  traceparser_get_info(),
  traceparser_init()
 
- We've expanded the entries for these functions, which you'll use
  if you're creating your own utility for parsing trace data (as an
  alternative to
  traceprinter).
  
 
- tzset()
 
- This function assumes the time zone if UTC0 if neither the
  TZ environment variable nor the _CS_TIMEZONE
  configuration string is set.
 
- 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()
 
-   
- The default value for MALLOC_ARENA_CACHE_MAXBLK is 12,
  not 8.
  
  
 
- We've corrected the description of MALLOC_MMAP_NOZERO.
    If this environment variable is nonzero, then when malloc()
    needs to expand the heap, it specifies the MAP_NOINIT flag
    when it calls
    mmap();
    if the physical memory being mapped was previously
    unmapped with UNMAP_INIT_OPTIONAL, then the POSIX
    requirement that the memory be zeroed is relaxed.
    This environment variable has been supported on all architectures since
    QNX Neutrino 6.3.2.
    
  
 
 
- 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.
  
 
The changes in QNX Neutrino 6.4.1 include the following:
- bt_get_backtrace()
 
- Collect a backtrace
  
  | 
  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
  
 
- 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().
  
  | 
  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()
 
-   
- We've documented the following flags:
    
- MAP_NOSYNCFILE
      
    
 
- MAP_BELOW
    
 
- MAP_ELF
    
 
- MAP_FILE — for compatibility; has no effect.
    
 
- MAP_RENAME — for compatibility; has no effect.
    
 
- MAP_NORESERVE — for compatibility; has no effect.
    
 
- MAP_SYSRAM — not a valid bit for mmap().
      
    
 
   
- The fildes argument can be the file descriptor for a file,
    shared memory object, or typed memory object, or NOFD
    if you're mapping physical memory.
    
  
 
- If you want to map a device's physical memory, use
    mmap_device_memory()
    instead of mmap();
    if you want to map a device's registers, use
    mmap_device_io().
    
  
 
- The mapping type controls whether or not changes are propagated
    to the underlying object.
    With MAP_PRIVATE, changes aren't propagated; with
    MAP_SHARED they are.
    
  
 
- You can use MAP_SHARED | MAP_ANON to
    create a region to be shared by forked applications.
    
  
 
- If you use MAP_PHYS without MAP_ANON,
    the offset specifies the exact physical address to map (e.g. for video
    frame buffers).
    If you use MAP_PHYS with MAP_ANON,
    mmap() allocates physically contiguous memory and ignores
    the offset.
    
  
 
- We've described how mmap() works with typed memory.
    
  
 
- When you're mapping a file, you can specify MAP_FILE,
    but it isn't necessary.
    We've added an example of mapping a file.
    
  
 
- You can now create more than one writeable mapping to a file.
    
  
 
 
- _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.
  
 
- 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:
  
- Use the flags whose names don't start with an underscore
    (RESMGR_FLAG_*) in the flags member of
    the resmgr_attr_t structure.
  
 
- Use the flags whose names do start with an underscore
    (_RESMGR_FLAG_*) in the flags argument
    to this function.
  
 
  
 
- 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.
  
 
The changes in QNX Neutrino 6.4.0 include the following:
- 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.
  
 
- 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.
 
- 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.
  | 
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
 
-   
- There's a new value, EOWNERDEAD, that indicates that the
  owner of a lock died while holding it.
  
  
 
- The value of EALREADY is changing so that it will be
    POSIX-compliant; for more information, see
    “Changes to EALREADY”
    in the documentation for 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
  
 
- 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()
 
- We've corrected the description of the MS_CACHE_ONLY flag
  (a QNX Neutrino extension).
  
  
 
- This function sets errno to EINTR if
    the call is interrupted by a signal.
    
  
 
 
- name_attach()
 
- This function fails and sets errno to EEXIST
  if the specified path already exists.
  
  
 
- If name_attach() creates a channel, the channel will have
    the _NTO_CHF_DISCONNECT,
    _NTO_CHF_COID_DISCONNECT and _NTO_CHF_UNBLOCK
    flags set.
    
  
 
 
- 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>.
  
 
The changes in QNX Neutrino 6.3.2 include the following:
- 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.
 
The changes in the QNX Neutrino Core OS 6.3.2 include the following:
- 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.
 
- 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:
  
- RLIMIT_MEMLOCK
  
 
- RLIMIT_NPROC
  
 
- RLIMIT_NTHR
  
 
- RLIMIT_OFILE
  
 
- RLIMIT_RSS
  
 
 
- 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:
- _NTO_TCTL_NAME
 
- _NTO_TCTL_ONE_THREAD_HOLD
 
- _NTO_TCTL_ONE_THREAD_CONT
 
- _NTO_TCTL_RUNMASK_GET_AND_SET
 
- _NTO_TCTL_RUNMASK_GET_AND_SET_INHERIT
 
 
The changes in QNX Neutrino 6.3.0 SP2 include the following:
- 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.
 
- 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>.
 
- _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.
 
The changes in QNX Neutrino 6.3.0 SP1 include the following:
- 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
 
- 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()
 
- Added descriptions of the rest of the flags for the
  inheritance structure.
  
 
- If you set SPAWN_EXEC in the flags member of
  the inheritance structure, these functions don't return,
  unless an error occurred.
  
 
 
- 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()
 
- The timeslice for round-robin scheduling (SCHED_RR)
  is 4 × the clock period.
  
 
- You can specify sporadic scheduling at any time, not just when you
    create a thread.
  
 
 
- 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.
 
The changes in QNX Neutrino 6.3.0 include the following:
- 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().
 
The changes in QNX Neutrino 6.2.1 include the following:
- 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
 
- 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.
 
- 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.
 
The changes in QNX Neutrino 6.2 include the following:
- 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
 
- snprintf()
	
 
- Corrected the Returns section and Classifications
 
The changes in QNX Neutrino 6.1.0 include the following:
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
 
- matherr()
  
 
- Handle errors in math library functions