Changed content

ChannelCreate()
There's a new _NTO_CHF_PRIVATE flag that you can use to mark the channel as being private.
clock_settime(), ClockTime()
The ability to set the system time is now controlled by the PROCMGR_AID_CLOCKSET ability, which you can set by calling procmgr_ability().
ClockPeriod()
  • The ability to change the clock period is now controlled by the PROCMGR_AID_CLOCKPERIOD ability, which you can set by calling procmgr_ability().
  • You can now call this function with a clock ID of CLOCK_HARMONIC, in order to set or get the harmonic timer boundary. Timers whose remaining time before expiry is greater than this boundary are considered for timer harmonization.
confstr()
  • The ability to set configuration strings is now controlled by the PROCMGR_AID_CONFSET ability, which you can set by calling procmgr_ability().
  • The documentation now states that if the value, including the terminating NULL, is greater than len bytes long, it's truncated to len - 1 bytes and terminated with a NULL character.
ConnectAttach()
The ability to establish a connection between a process and a channel is now controlled by the PROCMGR_AID_CONNECTION ability, which you can set by calling procmgr_ability().
devctl()
This function returns ENXIO if there's no such device or address (e.g., there's no media available to be loaded in the device represented by the file descriptor).
dlopen()
The ability to load shared objects is now controlled by the PROCMGR_AID_PROT_EXEC ability, which you can set by calling procmgr_ability().
errno
We've added the numerical value for each error code, and indicated which constants are defined by POSIX.
execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe()
The ability to create child processes is now controlled by the PROCMGR_AID_SPAWN ability, which you can set by calling procmgr_ability().
flock()
You no longer have to open a file with write permission in order to apply a lock on it.
fork()
  • The ability to fork processes is now controlled by the PROCMGR_AID_FORK ability, which you can set by calling procmgr_ability().
  • You can now fork a multithreaded process. The child process has a single thread, regardless of the number that the parent process has.
    Note: If your program uses mutexes, you need to register a pthread_atfork() handler that locks all the mutexes before you fork.
getaddrinfo()
This function is now thread-safe, as required by POSIX.
getgrouplist()
This function no longer ignores the basegid argument, but automatically adds it to the list of group IDs.
getgroups()
This function can now return up to sysconf(_SC_NGROUPS_MAX) group IDs. The limit used to be NGROUPS_MAX.
getnameinfo()
This function is now thread-safe, as required by POSIX.
getpgid(), getsid()
The ability to get the group ID or session ID of a process outside the calling process's session is now controlled by the PROCMGR_AID_GETID ability, which you can set by calling procmgr_ability().
h_errno
This variable is now thread-safe.
initgroups()
This function can now handle up to sysconf(_SC_NGROUPS_MAX) group IDs. The limit used to be NGROUPS_MAX.
InterruptAttach(), InterruptAttachEvent(), InterruptHookIdle(), InterruptHookTrace()
The ability to attach interrupt handlers and events is now controlled by the PROCMGR_AID_INTERRUPT ability. Threads that call these functions (except for InterruptHookIdle()) also need I/O privileges, which are controlled by the PROCMGR_AID_IO ability. Use procmgr_ability() to enable these abilities.
iofunc_mmap()
The io_mmap_t structure now includes a new input field, required_prot, and a new output field, allowed_prot.
iofunc_stat(), iofunc_stat_default()
These functions now return an errno value if an error occurred.
isalnum(), isalpha(), isblank(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), isxdigit()
Note that these functions take an integer argument, but the value must be representable as an unsigned char or be EOF; the behavior for other values is undefined.
iswalnum(), iswalpha(), iswblank(), iswcntrl(), iswdigit(), iswgraph(), iswlower(), iswprint(), iswpunct(), iswspace(), iswupper(), iswxdigit()
Note that these functions take a wint_t argument, but the value must be a wide-character code that corresponds to a valid character in the current locale, or must be WEOF; the behavior for other values is undefined.
kill()
The ability to send signals is now controlled by the PROCMGR_AID_SIGNAL ability, which you can set by calling procmgr_ability().
memccpy()
In order to conform to POSIX, this function now converts its c argument into an unsigned char.
mlock(), mlockall()
The ability to lock memory is now controlled by the PROCMGR_AID_MEM_LOCK ability, which you can set by calling procmgr_ability().
mmap()
  • The ability to do certain operations is now controlled by procmgr_ability():
    The ability to: Is controlled by:
    Map fixed addresses PROCMGR_AID_MAP_FIXED
    Map physical memory PROCMGR_AID_MEM_PHYS
    Map memory as executable PROCMGR_AID_PROT_EXEC
  • This function gives an error of EACCES if you specify PROT_EXEC for a memory-mapped file mapping, the file doesn't have execute permission for the client process, and procnto was started with the -mX option.
mmap_device_io(), mmap_device_memory()
In order to map physical memory, your process needs to have the PROCMGR_AID_MEM_PHYS ability enabled. See procmgr_ability().
mprotect()
This function gives an error of EACCES if you specify PROT_EXEC for a memory-mapped file mapping, the file doesn't have execute permission for the client process, and procnto was started with the -mX option.
MsgDeliverEvent()
As a convenience, you can specify a rcvid of 0 to target the event at the active thread.
MsgKeyData()
The ability to pass the data is now controlled by the PROCMGR_AID_KEYDATA ability, which you can set by calling procmgr_ability().
munmap_flags()
This function now supports the following flags:
  • UNMAP_CLEAN — clean the memory region when the unmapping is done, if possible.
  • UNMAP_NOCLEAN — don't clean the memory on unmapping, even if clean-on-unmapping is the default behavior.
open()
The supported flags now include:
  • O_NOFOLLOW — if the last component in the path is a symlink, make the open fail with an error of ELOOP.
  • O_NOSYMLINK — if any component in the path is a symlink, make the open fail with an error of ELOOP.
pathmgr_symlink()
The ability to create the symbolic link is now controlled by the PROCMGR_AID_PATHSPACE ability, which you can set by calling procmgr_ability().
poll()
If the remote end of a socket is closed, poll() now indicates both POLLIN and POLLHUP events.
posix_spawn(), posix_spawnp()
  • The ability to do certain operations is controlled by procmgr_ability():
    The ability to: Is controlled by:
    Spawn new processes PROCMGR_AID_SPAWN
    Set the group ID of the child process PROCMGR_AID_SPAWN_SETGID
    Set the user ID of the child process PROCMGR_AID_SPAWN_SETUID
    Create a new application ID for the child process PROCMGR_AID_CHILD_NEWAPP
  • The following flags are new:
    • POSIX_SPAWN_SETSID
    • POSIX_SPAWN_DEBUG
    • POSIX_SPAWN_EXEC
    • POSIX_SPAWN_NEWAPP
    • POSIX_SPAWN_SEARCH_PATH
    • POSIX_SPAWN_CHECK_SCRIPT
    • POSIX_SPAWN_PADDR64_SAFE
    • POSIX_SPAWN_TCSETPGROUP
procmgr_event_notify(), procmgr_event_trigger()
  • The ability to trigger privileged events is now controlled by the PROCMGR_AID_EVENT ability, which you can set by calling procmgr_ability().
  • There's a new PROCMGR_EVENT_TOD event that's triggered when a process changed the time of day.
procmgr_session()
The ability to use the PROCMGR_SESSION_SETSID event is now controlled by the PROCMGR_AID_PGRP ability; the ability to use the PROCMGR_SESSION_SETPGRP, PROCMGR_SESSION_SIGNAL_PID, PROCMGR_SESSION_SIGNAL_PGRP, and PROCMGR_SESSION_SIGNAL_LEADER events is now controlled by the PROCMGR_AID_SESSION ability. You can set these abilities by calling procmgr_ability().
pthread_getschedparam()
In order to get the scheduling policy for a process whose real or saved user ID is different from the calling process's real or effective user ID, the calling process must now have the PROCMGR_AID_SCHEDULE ability enabled. See procmgr_ability().
pthread_setschedparam(), pthread_setschedprio()
In order to set its priority to a value above the maximum allowed for an unprivileged process, a process must now have the PROCMGR_AID_ ability enabled. In order to set the scheduling policy for a process whose real or saved user ID is different from the calling process's real or effective user ID, the calling process must now have the PROCMGR_AID_SCHEDULE ability enabled. See procmgr_ability().
pthread_kill()
The ability to send a signal to a thread is now controlled by the PROCMGR_AID_SIGNAL ability, which you can set by calling procmgr_ability().
pthread_mutex_setprioceiling(), pthread_mutexattr_setprioceiling(), pthread_mutexattr_setprotocol()
The ability to set a mutex's priority ceiling to a value that's above the maximum priority for an unprivileged process is now controlled by the PROCMGR_AID_PRIORITY ability, which you can set by calling procmgr_ability().
pthread_setschedparam()
The ability to set the scheduling policy is now controlled by the PROCMGR_AID_SCHEDULE ability, which you can set by calling procmgr_ability().
pthread_sigmask()
The ability to change the signal mask is now controlled by the PROCMGR_AID_SIGNAL ability, which you can set by calling procmgr_ability().
readdir_r()
Some filesystems support names that are longer than the value of NAME_MAX. You can use pathconf() with _PC_NAME_MAX to determine the maximum number of bytes (not including the terminating null) allowed in a file name for a particular filesystem.
resmgr_attach()
The ability to add names to the pathname space is now controlled by the PROCMGR_AID_PATHSPACE ability, which you can set by calling procmgr_ability().
rsrcdbmgr_attach(), rsrcdbmgr_detach()
The ability to reserve a system resource for a process or return one to the resource database is now controlled by the PROCMGR_AID_RSRCDBMGR ability, which you can set by calling procmgr_ability().
SchedGet(), SchedSet()
In order to get or set the scheduling policy for a process whose real or saved user ID is different from the calling process's real or effective user ID, the calling process must now have the PROCMGR_AID_SCHEDULE ability enabled. See procmgr_ability().
sched_setparam(), sched_setscheduler(), SchedSet(), setprio()
In order to set its priority to a value above the maximum allowed for an unprivileged process, a process must now have the PROCMGR_AID_ ability enabled. See procmgr_ability().
setegid(), setgid(), setregid(), setgroups()
The ability to set a process's group ID, effective group ID, real and effective group IDs, or supplementary group IDs is now controlled by the PROCMGR_AID_SETGID ability, which you can set by calling procmgr_ability().
setgroups()
This function can now handle up to sysconf(_SC_NGROUPS_MAX) group IDs. The limit used to be NGROUPS_MAX.
seteuid(), setreuid(), setuid()
The ability to set a process's user ID, effective user ID, or both is now controlled by the PROCMGR_AID_SETUID ability, which you can set by calling procmgr_ability().
setpgrp()
The ability to is now controlled by the PROCMGR_AID_PGRP ability, which you can set by calling procmgr_ability(). This ability is enabled by default (for POSIX conformance).
setrlimit()
  • In order to raise the value of a hard limit, the process must now have the PROCMGR_AID_RLIMIT ability enabled. See procmgr_ability().
  • There's a new RLIMIT_FREEMEM resource that you can use to limit the total memory usage.
setsid()
The ability to create new sessions is now controlled by the PROCMGR_AID_PGRP ability, which you can set by calling procmgr_ability().
shm_ctl(), shm_ctl_special()
The ability to use the SHMCTL_GLOBAL flag is now controlled by the PROCMGR_AID_MEM_GLOBAL ability, which you can set by calling procmgr_ability().
sigaction(), signal(), SignalAction()
The ability to specify the action for a signal is now controlled by the PROCMGR_AID_SIGNAL ability, which you can set by calling procmgr_ability().
SignalKill()
  • The ability to send signals is now controlled by the PROCMGR_AID_SIGNAL ability, which you can set by calling procmgr_ability().
  • There's a new SIG_APPID flag that you can OR into the signo argument. This tells SignalKill() to send the signal to all the processes with an application ID that matches the pid argument.
SignalProcmask(), sigprocmask()
The ability to change the signal mask is now controlled by the PROCMGR_AID_SIGNAL ability, which you can set by calling procmgr_ability().
sigqueue()
The ability to send signals is now controlled by the PROCMGR_AID_SIGNAL ability, which you can set by calling procmgr_ability().
spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe()
  • The ability to create child processes is now controlled by the PROCMGR_AID_SPAWN ability, and the ability to create a new application ID for the child process is controlled by the PROCMGR_AID_CHILD_NEWAPP ability. You can set these abilities by calling procmgr_ability().
  • There's a new SPAWN_NEWAPP flag that makes spawn*() assign a new application ID to the process. If you don't set this flag, the process inherits the parent's application ID.
strtok_r()
Noted that you might want to keep a copy of the original string because strtok_r() is likely to modify it.
SyncMutexEvent(), SyncCtl(),
The ability to attach a pulse to a mutex is now controlled by the PROCMGR_AID_CONNECTION ability, which you can set by calling procmgr_ability().
sysmgr_reboot()
The ability to reboot your computer is now controlled by the PROCMGR_AID_REBOOT ability, which you can set by calling procmgr_ability().
tcsetpgrp()
The ability to set the process group ID is now controlled by the PROCMGR_AID_SESSION ability, which you can set by calling procmgr_ability().
ThreadCtl()
  • On ARMv6 and ARMv7 targets, the _NTO_TCTL_ALIGN_FAULT command is now ignored; you can no longer control the alignment-fault behavior on a per-thread basis on these targets. You can set the global behavior by using the -ad or -ae option to procnto*.
  • The ability to superlock the process's memory and request I/O privileges by using PROCMGR_AID_IO is now controlled by the PROCMGR_AID_IO ability, which you can set by calling procmgr_ability().
timer_create(), TimerCreate(), timer_getexpstatus(), timer_getoverrun(), timer_gettime(), TimerInfo()
The ability to create a timer that sends a pulse is now controlled by the PROCMGR_AID_TIMER ability, which you can set by calling procmgr_ability().
TimerInfo()
  • The ability to get timer information is now controlled by the PROCMGR_AID_TIMER ability, which you can set by calling procmgr_ability().
  • The flags argument has a new bit: _NTO_TI_REPORT_TOLERANCE. If you specify it, the function stores the timer tolerance in the otime.interval_nsec member of the _timer_info structure.
  • If the timer is a precise timer, _NTO_TI_PRECISE is set in the flags member of the _timer_info structure.
timer_settime(), TimerSettime()
The following flags are new (as QNX Neutrino extensions for timer_settime()):
  • TIMER_PRECISE — exclude the timer from timer harmonization.
  • TIMER_TOLERANCE — specify the amount of the tolerance to allow the kernel in low-power situations.
TimerTimeout(), timer_timeout()
You can OR TIMER_TOLERANCE into the flags argument if you want to specify the amount of the tolerance to allow the kernel in low-power situations. You can't use TIMER_TOLERANCE and TIMER_ABSTIME in the same call.

If you're setting an expiration time (i.e., you didn't specify TIMER_TOLERANCE), you can OR in TIMER_PRECISE to exclude the timer from timer harmonization.

tolower(), toupper()
Note that these functions take an integer argument, but the value must be representable as an unsigned char or be EOF; the behavior for other values is undefined.
towlower(), towupper()
Note that these functions take a wint_t argument, but the value must be a wide-character code that corresponds to a valid character in the current locale, or must be WEOF; the behavior for other values is undefined.
TraceEvent()
  • The ability to add handlers for trace events or allocate the instrumented kernel's trace buffers is now controlled by the PROCMGR_AID_TRACE ability, which you can set by calling procmgr_ability().
  • There's a new _NTO_TRACE_SETBUFFER command that you can use to specify some previously allocated physical memory to use as the trace buffer. The intended application is to place the buffer in an area of memory that will be preserved across system resets, facilitating post-crash analysis.
umask()
The ability to change the file-mode creation mask for a process with a different effective user ID is now controlled by the PROCMGR_AID_UMASK ability, which you can set by calling procmgr_ability().
UNIX-domain protocol family
We now support abstract Unix-domain sockets, which are indicated by an address whose leading byte is '\0'. They don't create nodes in the path space, which in turn means they don't need to be unlinked.
wait(), wait3(), wait4(), waitid(), waitpid()
The ability to wait for the status of a terminated child process whose real or saved user ID is different from the calling process's real or effective user ID is now controlled by the PROCMGR_AID_WAIT ability, which you can set by calling procmgr_ability().