QNX Neutrino 6.6 documentation online

New entries

_cred_info
Structure that describes user and group credentials
dl_iterate_phdr()
Iterate over the shared objects that are loaded into a process's address space
forksafe_mutex_destroy()
Destroy a forksafe mutex
forksafe_mutex_init()
Initialize a forksafe mutex
forksafe_mutex_lock()
Lock a forksafe mutex
forksafe_mutex_trylock()
Attempt to lock a forksafe mutex
forksafe_mutex_unlock()
Unlock a forksafe mutex
fsev_t, FSE_*()
Structure and macros for filesystem events
Note: The fsevmgr manager was inadvertently omitted from QNX SDP 6.6. You can get it from Technical Support.
hwi_find()
Find a specific item instance owned by a specific parent, resolving all synonym names
hwi_find_bus()
Find the offset of the section in the system page for a bus
hwi_find_device()
Find the offset in the system page of a device
hwi_find_devicebus()
Find the bus that a device belongs to
hwi_find_num_units()
Count the instances of a unit in the system page
hwi_find_unit()
Determine which instance of a device an offset corresponds to
hwi_tag_find()
Locate a specific instance of the named tag for a device
hwiattr_get(), hwiattr_get_*()
Get attributes of a bus or device
hwitag_find_busattr()
Find a bus attribute tag associated with a bus
hwitag_find_clkfreq()
Find the clock source for a device
hwitag_find_errata()
Find an erratum for a device
hwitag_find_ivec()
Find the interrupt vector associated with a device
hwitag_find_nicaddr()
Get the NIC address of a device
hwitag_find_phyaddr()
Find the PHY address associated with a device
InterruptHookIdle2()
Attach an "idle" interrupt handler. This kernel call replaces InterruptHookIdle() and attaches a handler that's suitable for a multiprocessor system.
iofunc_ability_check()
Verify that the client has a given resource manager ability
iofunc_notify_remove_strict()
Remove a specified number of notification entries from a list
iofunc_notify_trigger_strict()
Send notifications to queued clients
MsgPause()
Pause the processing of a message
_NTO_TRACE_GET*(), _NTO_TRACE_SET*()
Macros for working with the header of a trace event
pathmgr_link()
Create a link
procmgr_event_trigger_updateable()
Trigger a system-wide event, specifying a value for sigev_value
_readdir_r()
Read a directory and get stat information
set_ids_from_arg()
Change the caller's identifiers, based on a given string
siginfo_t
Information about a signal
slog2_close_log()
Close a system logger file
slog2_dump_logs_to_file()
Write a snapshot of slog2 logs to a file
slog2_get_buffer_info()
Get information about a slogger2 buffer
slog2_get_log_info()
Get information about a log file
slog2_open_log()
Open a system log for parsing
slog2_packet_cmp()
Compare two slogger2 packets
slog2_packet_info_t
Structure containing information about a packet
slog2_parse_all()
Parse all slogger2 files
slog2_parse_dynamic_buffer(), slog2_parse_static_buffer()
Parse a slogger2 buffer
sysctlbyname()
Get or set information about the socket manager, specifying the name of the variable as a string.
_TRACE_GET_STRUCT()
Get the flag from the header of a trace event

Discontinued

Changed content

*64()
The large-file support functions and data types now appear in the name space only if you define _LARGEFILE64_SOURCE when you compile your code. For more information, see "Classification" in What's in a Function Description?
bt_sprn_memmap()
Note that the out string might not be null-terminated.
ChannelCreate()
There's no need to set _NTO_CHF_REPLY_LEN or _NTO_CHF_SENDER_LEN; the kernel sets the dstmsglen and srcmsglen members of the _msg_info structure whether or not you set these flags.
chown()
You can pass -1 for the user ID or group ID (or both) if you don't want to change them.
clock_gettime()
You can pass CLOCK_PROCESS_CPUTIME_ID or CLOCK_THREAD_CPUTIME_ID as the clock_id argument to this function. These are special clock IDs that refer to the CPU time of the calling process and thread, respectively.
clock_nanosleep()
The descriptions of flags and rqtp have been updated.
clock_settime()
You can't set the time for a process or thread CPU-time clock.
ClockPeriod()
Note that you can set the clock period only for CLOCK_REALTIME.
ClockTime()
  • You can pass CLOCK_PROCESS_CPUTIME_ID or CLOCK_THREAD_CPUTIME_ID as the clock_id argument to this function. These are special clock IDs that refer to the CPU time of the calling process and thread, respectively.
  • You can't set the time for a process or thread CPU-time clock.
close()
In the QNX Neutrino implementation, the file descriptor remains open when this function indicates an error of EINTR.
ConnectClientInfo(), ConnectClientInfoAble(), ConnectClientInfoExt()
If the scoid argument is -1, these functions get the information about the calling process.
ConnectServerInfo()
  • Note that if the pid argument is 0, the function searches for the connection in the current process.
  • The flags member of the _server_info structure includes the _NTO_COF_INSECURE flag if it's set on the connection.
daemon()
You can now use this function in multithreaded programs.
devctl(), devctlv()
  • We've added EFAULT to the list of errors.
  • The devctlv() function returns EOVERFLOW if the sum of the IOV lengths for the send and receive buffers combined exceeds INT_MAX, or the number of parts for the send and receive buffers combined exceeds 524288.
dhcpctl*()
These functions can return ISC_R_SUCCESS, and some of the OMAPI code uses an MDL macro. Neither of these is defined in a public header, but you can define them in your code if you wish.
dispatch_create(), dispatch_create_channel()
In order to create a public channel (i.e., without _NTO_CHF_PRIVATE set), your process must have the PROCMGR_AID_PUBLIC_CHANNEL ability enabled.
dlopen()
For security reasons, the runtime linker unsets LD_DEBUG_OUTPUT, LD_LIBRARY_PATH, and LD_PRELOAD if the binary has the setuid bit set.
encrypt()
We've added an example, but for more secure encryption, use OpenSSL instead of this function.
execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe()
We've added EMFILE to the list of error codes.
fcntl()
  • We've documented the F_GETOWN and F_SETOWN commands.
  • We've updated the list of file status flags for the F_GETFL and F_SETFL commands.
fopen()
We've described how you can change the size of the buffer that's used internally by the stream I/O functions. Doing this can improve buffered I/O performance.
fork()
We've simplified the example and added more error checking to it.
freopen()
Note that the filepath argument can be NULL, in which case the function reopens the file associated with the stream fp.
getitimer(), setitimer()
POSIX has marked these functions as obsolescent; you should use timer_gettime() and timer_settime() instead. Nevertheless, we've corrected the descriptions.
getsockopt(), setsockopt()
  • Options that can be enabled or disabled have a value of zero if disabled, or a nonzero value if enabled. We've described the SO_ACCEPTCONN option.
  • We've described the SO_OVERFLOWED option.
getprio()
In order to get the priority for a thread whose real or saved user ID is different from the calling process's real or effective user ID, your process must have the PROCMGR_AID_SCHEDULE ability enabled.
InterruptAttach(), InterruptAttachEvent()
  • We've added more details about synthetic interrupts.
  • You can now specify _NTO_INTR_FLAGS_NO_UNMASK to leave the interrupt masked.
  • We've added more details about choosing the event type for the sigevent.
InterruptHookTrace()
We've added more details about how to use this function.
_io_connect
We've documented the _IO_CONNECT_EFLAG_DOTDOT extended flag.
_io_devctl, _io_devctl_reply, _io_lock, _io_read, _io_write
The nbytes members of these structures are now of type uint32_t.
_io_fdinfo
The path_len member of this structure is now of type uint32_t.
iofunc_mknod()
We've added EACCES to the list of errors for this function.
iofunc_notify()
  • We've documented _NOTIFY_ACTION_CONDARM and updated the list of errors for this function.
  • We've removed the _NOTIFY_CONDE_* extended flags, which are now used only internally.
iofunc_notify_trigger(), iofunc_notify_trigger_strict()
  • A resource manager generally calls iofunc_notify_trigger_strict() in a close_dup callout to unblock any client select() calls that are waiting on a file descriptor that's been closed. You should call it three times with a count value of INT_MAX, the ctp passed to the close_dup callout, and an index of IOFUNC_NOTIFY_INPUT, IOFUNC_NOTIFY_OUTPUT, and IOFUNC_NOTIFY_OBAND.
  • To ensure thread safety, lock the underlying object before calling this function.
iofunc_notify_remove(), iofunc_notify_remove_strict()
A resource manager typically calls one of these functions in its close_dup handler.
iofunc_ocb_t
We've documented the IOFUNC_OCB_MMAP bit for the flags member.
iofunc_openfd(), iofunc_read_verify(), iofunc_write_verify()
We've removed the xtype types and flags that aren't relevant to these functions.
ionotify()
  • We've documented _NOTIFY_ACTION_CONDARM and updated the list of errors for this function.
  • We've removed the _NOTIFY_CONDE_* extended flags, which are now used only internally.
kill(), killpg()
If a signal terminates a process, the cleanup of the terminated process occurs by default at the priority of the thread that sent the signal. As a QNX Neutrino extension, if you OR the SIG_TERMER_NOINHERIT flag into the signal number, the cleanup occurs at the priority of the thread that received the signal.
lchown()
You can pass -1 for the user ID or group ID (or both) if you don't want to change them.
mallopt()
This entry now describes the libc and librcheck versions of this function.
memchr(), memcpy(), memset(), strchr(), strcpy(), strlen()
On ARM v7 targets, you can use the LIBC_STRINGS environment variable to select the memory implementation to use for these functions.
memicmp(), stricmp()
Note that these functions return different results:
  • memicmp() returns the difference between the original characters
  • stricmp() returns the difference between the lowercase version of the characters

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

message_attach()
  • In order to create a public channel (i.e., without _NTO_CHF_PRIVATE set), your process must have the PROCMGR_AID_PUBLIC_CHANNEL ability enabled.
  • Once you've called dispatch_context_alloc(), don't call message_attach() or resmgr_attach() specifying a different maximum message size or a different number of message parts for the same dispatch handle.
  • You can pass NULL for the attr argument if you want to use the default attributes.
mmap()
  • In order to use MAP_PHYS to map physical memory, your process must have the PROCMGR_AID_MEM_PHYS ability enabled; you don't need this ability if you also specify MAP_ANON.
  • We recommend that you not have a shared, writable mapping to a file that you're simultaneously accessing via write(). The interaction between the two methods isn't well defined and may give unexpected results.
  • We've added more details about why you'd get an error of EINVAL.
mq_notify()
This function sets errno to EINVAL if the notification argument is NULL but the process isn't currently registered.
MsgDeliverEvent()
We've described how the priority of a pulse is checked and provided more details about the possible meanings of the error codes.
MsgKeyData(), MsgKeyData_r()
  • If op is _NTO_KEYDATA_CALCULATE, you can pass 0 for key to request that the kernel generate a pseudo-random number to use for the key.
  • These functions indicate an error of EINVAL if the number of IOV parts exceeds 524288, or the op argument is invalid.
MsgRead(), MsgRead_r(), MsgReadv(), MsgReadv_r(), MsgWrite(), MsgWrite_r(), MsgWritev(), MsgWritev_r()
Note that these functions can give an error of ESRCH if the thread has already been replied to.
MsgReadv(), MsgReadv_r(), MsgReceivePulsev(), MsgReceivePulsev_r(), MsgReceivev(), MsgReceivev_r(), MsgReplyv(), MsgReplyv_r(), MsgSendsv(), MsgSendsv_r(), MsgSendsvnc(), MsgSendsvnc_r(), MsgSendv(), MsgSendv_r(), MsgSendvnc(), MsgSendvnc_r(), MsgSendvs(), MsgSendvs_r(), MsgSendvsnc(), MsgSendvsnc_r(), MsgWritev(), MsgWritev_r()
These functions indicate an error of EOVERFLOW if the sum of the IOV lengths exceeds INT_MAX, or the number of parts exceeds 524288.
name_attach()
  • This function gives an error of ENOENT if you attempt to attach a global name, but gns isn't running.
  • In order to create a public channel (i.e., without _NTO_CHF_PRIVATE set), your process must have the PROCMGR_AID_PUBLIC_CHANNEL ability enabled.
openlog()
You can use the LOG_CONS flag to redirect syslogd output to slogger.
pci_read_config(), pci_read_config16(), pci_read_config32(), pci_read_config8(), pci_write_config(), pci_write_config16(), pci_write_config32(), pci_write_config8()
For the details of the configuration space, see the _pci_config_regs structure in <hw/pci.h>; for examples of reading from it, see the entries for pci_attach_device() and pci_read_config16().
posix_spawnp()
Note that in QNX Neutrino, if the file argument doesn't contain a slash, and the PATH environment variable isn't defined, then the OS searches for the executable in the current working directory.
procmgr_ability()
  • This function gives an error of EPERM if a non-root process tries to change the abilities for another process.
  • We've added more details about specifying subranges with the PROCMGR_AOP_SUBRANGE operation.
  • This function indicates an error of E2BIG if the list of abilities is too large. Thus could happen if you don't terminate the list with PROCMGR_AID_EOL.
procmgr_event_notify(), procmgr_event_notify_add()
  • There's a new PROCMGR_EVENT_CONTIG_ALLOC_FAIL flag that you can use if you want a pulse to be delivered if an attempt to allocate contiguous memory failed.
  • If you set SIGEV_FLAG_UPDATEABLE in the hidden bits in the sigevent structure, the kernel provides some additional information in the sigev_value member when it notifies your process of the event.
pthread_cond_init(), pthread_mutex_init()
These functions now return ENOMEM instead of EAGAIN if all kernel synchronization objects are in use.
pthread_kill()
If a signal terminates a process, the cleanup of the terminated process occurs by default at the priority of the thread that sent the signal. As a QNX Neutrino extension, if you OR the SIG_TERMER_NOINHERIT flag into the signal number, the cleanup occurs at the priority of the thread that received the signal.
pulse_attach()
  • In order to create a public channel (i.e., without _NTO_CHF_PRIVATE set), your process must have the PROCMGR_AID_PUBLIC_CHANNEL ability enabled.
  • We've described the circumstances in which this function can indicate an error of EBUSY.
resmgr_attach()
  • In order to create a public channel (i.e., without _NTO_CHF_PRIVATE set), your process must have the PROCMGR_AID_PUBLIC_CHANNEL ability enabled.
  • Once you've called dispatch_context_alloc(), don't call message_attach() or resmgr_attach() specifying a different maximum message size or a different number of message parts for the same dispatch handle.
  • You can pass NULL for the attr argument if you want to use the default attributes.
resmgr_connect_funcs_t
Note that in order to correctly define RESMGR_HANDLE_T, you need to #include <sys/iofunc.h> before <sys/resmgr.h>.
resmgr_context_t
We've described the extra member.
resmgr_handle_tune()
To avoid allocator thrashing, the resource manager framework always keeps at least eight handles and hash buckets, no matter what minimum values you specify. It also uses a minimum bucket size of 16.
resmgr_io_funcs_t
Note that in order to correctly define RESMGR_OCB_T, you need to #include <sys/iofunc.h> before <sys/resmgr.h>.
ROUTE protocol
You can now have multiple routes to the same destination; we've updated the example.
rsrcdbmgr_devno_attach(), rsrcdbmgr_devno_detach()
  • We've updated the list of errors for rsrcdbmgr_devno_attach().
  • In order to use these functions, your process must have the PROCMGR_AID_RSRCDBMGR ability enabled.
  • Note that the process that's detaching the device number must be the process that attached it; otherwise rsrcdbmgr_devno_detach() sets errno to EINVAL.
  • If the requested device number is already in use (whether by the calling process or a different process), rsrcdbmgr_devno_attach() returns -1 and sets errno to EINVAL. If you don't detach a device, it's released when the process that attached it terminates.
sched_getparam(), sched_getscheduler(),
In order to get the scheduling policy and parameters for a thread whose real or saved user ID is different from the calling process's real or effective user ID, your process must have the PROCMGR_AID_SCHEDULE ability enabled.
sched_rr_get_interval()
In QNX Neutrino, this interval is the timeslice for the SCHED_RR scheduling policy.
SchedCtl()
  • There are new members in the sched_aps_create_parms, sched_aps_partition_info, sched_aps_join_parms, and sched_aps_modify_parms structures.
  • There are new SCHED_APS_SCHEDPOL_PARTITION_LOCAL_PRIORITIES, SCHED_APS_SCHEDPOL_LIMIT_CPU_USAGE, and SCHED_APS_SCHEDPOL_NO_LONG_REPORTING scheduling policies. The SCHED_APS_SCHEDPOL_DEFAULT policy now means that SCHED_APS_SCHEDPOL_FREETIME_BY_RATIO isn't set, long-window reporting is enabled, and all maximum budgets are 100%.
SchedInfo()
For the SCHED_RR and SCHED_OTHER scheduling policies, the interval is the timeslice in nanoseconds; for SCHED_FIFO and SCHED_SPORADIC, it's 0.
sched_setparam(), sched_setscheduler(), setprio()
In order to set the scheduling policy and parameters for a thread whose real or saved user ID is different from the calling process's real or effective user ID, your process must have the PROCMGR_AID_SCHEDULE ability enabled.
select_attach()
  • In order to create a public channel (i.e., without _NTO_CHF_PRIVATE set), your process must have the PROCMGR_AID_PUBLIC_CHANNEL ability enabled.
  • The attr argument isn't currently used; pass NULL for it.
sem_init()
It's always safe, and typically faster, to assure that sem is 32-bit aligned.
sem_post()
We've added EINTR to the list of error codes for this function.
sendmsg()
You typically use this function on datagram (SOCK_DGRAM) sockets, which use the send buffer only as a length check and place the message in the interface transmit queue. If the interface transmit queue is full, sendmsg() returns -1 and sets errno to ENOBUFS.
shm_open()
The location in the pathname space where shared objects appear has changed:
name Pathname space entry
entry /dev/shmem/CWD/entry
/entry /dev/shmem/entry

where CWD is the current working directory for the program at the point that it calls shm_open().

shutdown_system()
  • The shutdown type now includes:
    • SHUTDOWN_KILLSWITCH
    • SHUTDOWN_WARMREBOOT
  • After sending a SIGTERM signal to a process, this function sends a SIGCONT signal, in case the process had earlier been stopped.
  • Note that when the shutdown_classify() callout is invoked, only the pid and name members of the ProcessInfo_t structure have been initialized. Don't modify any of the members of this structure.
  • The shutdown_classify() callout can now classify a process as CLASS_GRAPHICAL_APP or CLASS_NR.
  • You can define your callouts in the same file as your call to shutdown_system() or put them in a library that you link against before libshutdown.a.
pthread_kill(), sigaction(), signal(), SignalKill(), sigqueue()
If a signal terminates a process, the cleanup of the terminated process occurs by default at the priority of the thread that sent the signal. As a QNX Neutrino extension, if you OR the SIG_TERMER_NOINHERIT flag into the signal number, the cleanup occurs at the priority of the thread that received the signal.
struct sigaction
We've documented the SA_NOCLDWAIT, SA_NODEFER, and SA_RESETHAND flags.
sigevent
We've described the SIGEV_MEMORY event and the SIGEV_FLAG_UPDATEABLE flag.
SignalAction()
  • If a signal terminates a process, the cleanup of the terminated process occurs by default at the priority of the thread that sent the signal. As a QNX Neutrino extension, if you OR the SIG_TERMER_NOINHERIT flag into the signal number, the cleanup occurs at the priority of the thread that received the signal.
  • We've updated the list of POSIX and Unix signals and included the default action for each.
SignalWaitinfo(), sigtimedwait(), sigwait(), sigwaitinfo()
We've explained how to work around a possible race condition between blocking the signal and calling these functions.
slogb(), slogf(), slogi(), vslogf()
You can't redirect slogger output to slogger2 in general, but if a program uses the slogger APIs, you can preload the libslog2shim.so library when you start the program, in order to redirect its logs.
slog2_register()
  • We've documented the SLOG2_ALLOC_TYPE_SHMEM flag.
  • Use slog2_reset() to unregister the buffer set.
slogb(), slogf(), slogi(), vslogf()
If you want the data in the log message to be interpreted as text, use a bitwise OR to add _SLOG_TEXTBIT to the severity. If this bit is set, slogf() and vslogf() also write the log message on stderr.
socket()
Note that we don't support SOCK_RDM or SOCK_SEQPACKET sockets.
snprintf(), vsnprintf()
The Caveats section now suggests a way to avoid the problem with calculating the length when you're building a string one piece at a time.
spawn()
There's a new SPAWN_ASLR_INVERT flag that you can use to toggle the Address Space Layout Randomization bit for the child process.
struct stat
  • We've added the octal values for the flags in the st_mode member.
  • The st_mode member includes the _S_ACL_EXT bit if the file has an extended Access Control List.
strtoimax(), strtoumax(), strtol(), strtoll(), strtoul(), strtoull()
If the conversion couldn't be performed, these functions return 0 and set errno to EINVAL.
SyncCondvarWait(), SyncCondvarWait_r()
  • These functions indicate an error of EINTR if they're interrupted by a signal.
  • Don't use a recursive mutex with condition variables.
sysconf()
We've documented _SC_MQ_OPEN_MAX and _SC_MQ_PRIO_MAX.
tempnam(), tmpnam()
POSIX has marked these functions as obsolescent; use mkstemp() or tmpfile() instead.
thread_pool_create()
  • Note that in order to correctly define THREAD_POOL_PARAM_T, you need to #include <sys/resmgr.h> before <sys/dispatch.h>.
  • Note that this function does a shallow copy of the thread_pool_attr_t structure; it doesn't make copies of anything that the structure points to.
ThreadCtl()
  • We've expanded the descriptions of _NTO_TCTL_IO and _NTO_TCTL_IO_PRIV.
  • Note that if you set a thread's runmask, it takes effect immediately.
timer_settime()
If you want infinite timer tolerance, call TimerSettime() instead of timer_settime().
TimerAlarm()
We've explained how to make the timer repeat.
TimerInfo(), TimerInfo_r()
  • We've documented the _NTO_TI_PROCESS_TOLERANT, _NTO_TI_TARGET_PROCESS, _NTO_TI_TOD_BASED, and _NTO_TI_TOLERANT bits that are used in the flags member of the _timer_info structure.
  • Note that you can pass NULL for the info argument if the only bit set in flags is _NTO_TIMER_RESET_OVERRUNS.
TimerSettime()
If you specify the TIMER_TOLERANCE flag and you want infinite timer tolerance, you can specify a large value (e.g., ~0ULL) for the nsec member of the itime argument.
TimerTimeout(), timer_timeout()
We've clarified how to use these functions.
TraceEvent()
  • The system state information that's logged when you issue an _NTO_TRACE_START command is overwritten when the kernel reuses the buffer; if you're logging events in ring mode, you can make sure you capture the process names by issuing an _NTO_TRACE_START command followed by _NTO_TRACE_STOP after you've finished tracing.
  • Note that you must issue a _NTO_TRACE_STOP for each _NTO_TRACE_START or _NTO_TRACE_STARTNOSTATE command.
  • _NTO_TRACE_SETLINEARMODE and _NTO_TRACE_SETRINGMODE cause the trace buffers to be cleared, so you should use these commands before you start tracing.
  • The linkliststart argument to the _NTO_TRACE_ALLOCBUFFER command is now of type paddr_t *.
  • We've documented the _NTO_TRACE_INSERTCCLASSEVENT, _NTO_TRACE_INSERTSCLASSEVENT, _NTO_TRACE_OVERWRITEBUFFER, _NTO_TRACE_QUERYSUPPORT, _NTO_TRACE_QUERYVERSION, and _NTO_TRACE_SKIPBUFFER commands.
  • Note that the only library functions that you can call in your event handler are those that are safe to call from an interrupt handler. Your event handler must also be reentrant.
vfork()
Note that we provide this function for backward compatibility. You should use posix_spawn() instead.
waitid()
We've described the WTRAPPED flag.

We've updated the classifications of the following, to conform to POSIX.1-2008, 2013 Edition:

Function or data type Classification
aiocb POSIX 1003.1
aio_cancel() POSIX 1003.1
aio_error() POSIX 1003.1
aio_fsync() POSIX 1003.1
aio_read() POSIX 1003.1
aio_return() POSIX 1003.1
aio_suspend() POSIX 1003.1
aio_write() POSIX 1003.1
alphasort() POSIX 1003.1
asctime(), asctime_r() POSIX 1003.1
basename() POSIX 1003.1
bcmp() Standard Unix; removed from POSIX.1-2008
bcopy() Standard Unix; removed from POSIX.1-2008
bzero() Standard Unix; removed from POSIX.1-2008
clock_getres() POSIX 1003.1
clock_gettime() POSIX 1003.1
clock_nanosleep() POSIX 1003.1
clock_settime() POSIX 1003.1
closelog() POSIX 1003.1
ctime() POSIX 1003.1 OB
dirname() POSIX 1003.1
dlclose() POSIX 1003.1
dlerror() POSIX 1003.1
dlopen() POSIX 1003.1
dlsym() POSIX 1003.1
endgrent() POSIX 1003.1
endpwent() POSIX 1003.1
fchdir() POSIX 1003.1
flockfile() POSIX 1003.1
fstatvfs() POSIX 1003.1
ftime() Standard Unix; removed from POSIX.1-2008
ftrylockfile() POSIX 1003.1
ftw() POSIX 1003.1 OB XSI
funlockfile() POSIX 1003.1
getchar_unlocked() POSIX 1003.1
getc_unlocked() POSIX 1003.1
getgrent() POSIX 1003.1
getgrgid_r() POSIX 1003.1
getgrnam_r() POSIX 1003.1
gethostbyaddr() Standard Unix; removed from POSIX.1-2008
gethostbyname() Standard Unix; removed from POSIX.1-2008
getitimer() POSIX 1003.1 OB XSI
getlogin_r() POSIX 1003.1
getpgid() POSIX 1003.1
getpwent_r() NetBSD
getpwent() POSIX 1003.1
getpwnam_r() POSIX 1003.1
getpwuid_r() POSIX 1003.1
getrlimit() POSIX 1003.1
getrusage() POSIX 1003.1
getsid() POSIX 1003.1
getsubopt() POSIX 1003.1
gets() POSIX 1003.1 OB
gettimeofday() POSIX 1003.1 OB XSI
getwd() Standard Unix; removed from POSIX.1-2008
gmtime_r() POSIX 1003.1
grantpt() POSIX 1003.1
h_errno Standard Unix; removed from POSIX.1-2008
hsearch() POSIX 1003.1
index() Standard Unix; removed from POSIX.1-2008
initstate() POSIX 1003.1
insque() POSIX 1003.1
ioctl(), ioctl_socket() POSIX 1003.1 OB XSR
isascii() POSIX 1003.1 OB XSI
killpg() POSIX 1003.1
lchown() POSIX 1003.1
lio_listio() POSIX 1003.1
localtime_r() POSIX 1003.1
lockf(), lockf64() POSIX 1003.1
mknod() POSIX 1003.1
mkstemp() POSIX 1003.1
mmap() POSIX 1003.1 SHM|TYM
mprotect() POSIX 1003.1
mq_timedreceive() POSIX 1003.1
mq_timedsend() POSIX 1003.1
msync() POSIX 1003.1 SIO
munmap() POSIX 1003.1 SHM|TYM
nanosleep() POSIX 1003.1
nftw() POSIX 1003.1
openlog() POSIX 1003.1
poll() POSIX 1003.1
pread() POSIX 1003.1
pthread_atfork() POSIX 1003.1
pthread_attr_destroy() POSIX 1003.1
pthread_attr_getdetachstate() POSIX 1003.1
pthread_attr_getguardsize() POSIX 1003.1
pthread_attr_getinheritsched() POSIX 1003.1 TPS
pthread_attr_getschedparam() POSIX 1003.1
pthread_attr_getschedpolicy() POSIX 1003.1 TPS
pthread_attr_getscope() POSIX 1003.1 TPS
pthread_attr_getstackaddr() Standard Unix; removed from POSIX.1-2008
pthread_attr_getstacksize() POSIX 1003.1 TSS
pthread_attr_init() POSIX 1003.1
pthread_attr_setdetachstate() POSIX 1003.1
pthread_attr_setguardsize() POSIX 1003.1
pthread_attr_setinheritsched() POSIX 1003.1 TPS
pthread_attr_setschedparam() POSIX 1003.1
pthread_attr_setschedpolicy() POSIX 1003.1 TPS
pthread_attr_setscope() POSIX 1003.1 TPS
pthread_attr_setstackaddr() Standard Unix; removed from POSIX.1-2008
pthread_attr_setstacksize() POSIX 1003.1 TSS
pthread_barrierattr_destroy() POSIX 1003.1
pthread_barrierattr_getpshared() POSIX 1003.1 TSH
pthread_barrierattr_init() POSIX 1003.1
pthread_barrierattr_setpshared() POSIX 1003.1 TSH
pthread_barrier_destroy() POSIX 1003.1
pthread_barrier_init() POSIX 1003.1
pthread_barrier_wait() POSIX 1003.1
pthread_cancel() POSIX 1003.1
pthread_cleanup_pop() POSIX 1003.1
pthread_cleanup_push() POSIX 1003.1
pthread_condattr_destroy() POSIX 1003.1
pthread_condattr_getclock() POSIX 1003.1
pthread_condattr_getpshared() POSIX 1003.1 TSH
pthread_condattr_init() POSIX 1003.1
pthread_condattr_setclock() POSIX 1003.1
pthread_condattr_setpshared() POSIX 1003.1 TSH
pthread_cond_broadcast() POSIX 1003.1
pthread_cond_destroy() POSIX 1003.1
pthread_cond_init() POSIX 1003.1
pthread_cond_signal() POSIX 1003.1
pthread_cond_timedwait() POSIX 1003.1
pthread_cond_wait() POSIX 1003.1
pthread_create() POSIX 1003.1
pthread_detach() POSIX 1003.1
pthread_equal() POSIX 1003.1
pthread_exit() POSIX 1003.1
pthread_getconcurrency() POSIX 1003.1 OB XSI
pthread_getcpuclockid() POSIX 1003.1 TCT
pthread_getschedparam() POSIX 1003.1 TPS
pthread_getspecific() POSIX 1003.1
pthread_join() POSIX 1003.1
pthread_kill() POSIX 1003.1
pthread_mutexattr_destroy() POSIX 1003.1
pthread_mutexattr_getprioceiling() POSIX 1003.1 RPP TPP
pthread_mutexattr_getprotocol() POSIX 1003.1 MC1 TPP|TPI
pthread_mutexattr_getpshared() POSIX 1003.1 TSH
pthread_mutexattr_gettype() POSIX 1003.1
pthread_mutexattr_init() POSIX 1003.1
pthread_mutexattr_setprioceiling() POSIX 1003.1 RPP TPP
pthread_mutexattr_setprotocol() POSIX 1003.1 MC1 TPP|TPI
pthread_mutexattr_setpshared() POSIX 1003.1 TSH
pthread_mutexattr_settype() POSIX 1003.1
pthread_mutex_destroy() POSIX 1003.1
pthread_mutex_getprioceiling() POSIX 1003.1 RPP|TPP
pthread_mutex_init() POSIX 1003.1
pthread_mutex_lock() POSIX 1003.1
pthread_mutex_setprioceiling() POSIX 1003.1 RPP|TPP
pthread_mutex_timedlock() POSIX 1003.1
pthread_mutex_trylock() POSIX 1003.1
pthread_mutex_unlock() POSIX 1003.1
pthread_once() POSIX 1003.1
pthread_rwlockattr_destroy() POSIX 1003.1
pthread_rwlockattr_getpshared() POSIX 1003.1 TSH
pthread_rwlockattr_init() POSIX 1003.1
pthread_rwlockattr_setpshared() POSIX 1003.1 TSH
pthread_rwlock_destroy() POSIX 1003.1
pthread_rwlock_init() POSIX 1003.1
pthread_rwlock_rdlock() POSIX 1003.1
pthread_rwlock_timedrdlock() POSIX 1003.1
pthread_rwlock_timedwrlock() POSIX 1003.1
pthread_rwlock_tryrdlock() POSIX 1003.1
pthread_rwlock_trywrlock() POSIX 1003.1
pthread_rwlock_unlock() POSIX 1003.1
pthread_rwlock_wrlock() POSIX 1003.1
pthread_self() POSIX 1003.1
pthread_setcancelstate() POSIX 1003.1
pthread_setcanceltype() POSIX 1003.1
pthread_setconcurrency() POSIX 1003.1 OB XSI
pthread_setschedparam() POSIX 1003.1 TPS
pthread_setschedprio() POSIX 1003.1 TPS
pthread_setspecific() POSIX 1003.1
pthread_spin_destroy() POSIX 1003.1
pthread_spin_init() POSIX 1003.1
pthread_spin_lock() POSIX 1003.1
pthread_spin_trylock() POSIX 1003.1
pthread_spin_unlock() POSIX 1003.1
pthread_testcancel() POSIX 1003.1
ptsname() POSIX 1003.1
putchar_unlocked() POSIX 1003.1
putc_unlocked() POSIX 1003.1
pwrite() POSIX 1003.1
random() POSIX 1003.1
rand_r() POSIX 1003.1 OB
readdir_r() POSIX 1003.1
realpath() POSIX 1003.1
remque() POSIX 1003.1
rindex() Standard Unix; removed from POSIX.1-2008
scalb() Standard Unix; removed from POSIX.1-2008
scandir() POSIX 1003.1
sched_get_priority_max() POSIX 1003.1 PS|TPS
sched_get_priority_min() POSIX 1003.1 PS|TPS
sched_rr_get_interval() POSIX 1003.1 PS|TPS
sched_yield() POSIX 1003.1
sem_close() POSIX 1003.1
sem_destroy() POSIX 1003.1
sem_getvalue() POSIX 1003.1
sem_init() POSIX 1003.1
sem_open() POSIX 1003.1
sem_post() POSIX 1003.1
sem_timedwait() POSIX 1003.1
sem_trywait() POSIX 1003.1
sem_unlink() POSIX 1003.1
sem_wait() POSIX 1003.1
setgrent() POSIX 1003.1
setitimer() POSIX 1003.1 OB XSI
setlogmask() POSIX 1003.1
setpgrp() POSIX 1003.1 OB XSI
setpwent() POSIX 1003.1
setregid() POSIX 1003.1
setreuid() POSIX 1003.1
setrlimit() POSIX 1003.1
setstate() POSIX 1003.1
sigpause() POSIX 1003.1
sigqueue() POSIX 1003.1
sigtimedwait() POSIX 1003.1
sigwaitinfo() POSIX 1003.1
srandom() POSIX 1003.1
statvfs() POSIX 1003.1
strcasecmp() POSIX 1003.1
strdup() POSIX 1003.1
strerror_r() POSIX 1003.1
strncasecmp() POSIX 1003.1
strnlen() POSIX 1003.1
strptime() POSIX 1003.1
strsignal() POSIX 1003.1
strtok_r() POSIX 1003.1
sync() POSIX 1003.1
syslog() POSIX 1003.1
tcgetsid() POSIX 1003.1
tempnam() POSIX 1003.1 OB XSI
timer_create() POSIX 1003.1
timer_delete() POSIX 1003.1
timer_getoverrun() POSIX 1003.1
timer_gettime() POSIX 1003.1
timer_settime() POSIX 1003.1
tmpnam() POSIX 1003.1 OB
truncate() POSIX 1003.1
ttyname_r() POSIX 1003.1
ualarm() Standard Unix; removed from POSIX.1-2008
unlockpt() POSIX 1003.1
usleep() Standard Unix; removed from POSIX.1-2008
vfork() Standard Unix; removed from POSIX.1-2008
waitid() POSIX 1003.1

Errata

It's safe to use the following functions in a multithreaded program:

It isn't safe to call these functions in a multithreaded program:

It's safe to use the following functions in a signal handler:

Other corrections include:

acl_calc_mask()
We've corrected the description of the acl_p argument.
acl_create_entry()
We've corrected the meaning of EINVAL.
acl_set_permset()
We've corrected the description of the entry_d argument.
alloca()
This function doesn't set errno; if there isn't enough memory, it simply returns NULL.
alphasort()
We've corrected the synopsis.
atexit()
We've corrected the synopsis.
bindresvport()
You need to include <rpc/rpc.h>.
cabs(), cabsf(), cabsl()
We've corrected the synopsis.
calloc(), malloc(), realloc()
These functions set errno only if an error occurred.
clock_gettime()
You can't call this function with a clock ID of CLOCK_SOFTTIME.
closedir()
This function doesn't give an error of EBADF.
confstr()
We've corrected the description of what this function returns.
ConnectClientInfoAble()
This function sets the flags member of the _client_able structure for an ability to 1 if the client has the ability, or 0 if it doesn't. If the client doesn't have all the indicated abilities, this function sets the _NTO_CI_UNABLE bit in the flags member of the _client_info structure.
ConnectFlags(), ConnectFlags_r()
If the _NTO_COF_INSECURE flag is set on a connection, calls to MsgDeliverEvent() with an event type of SIGEV_MEMORY or SIGEV_THREAD fail with an error of EACCES.
delay()
This function doesn't set errno.
dlerror()
This function returns NULL if no dynamic-linking errors have occurred since it was last invoked.
_exit(), exit()
We corrected the name of EXIT_SUCCESS.
fcloseall()
This function closes all open streams, including stdin, stdout, and stderr.
fcntl()
There's no detection for deadlocks involving file locks; this function doesn't set errno to EDEADLK.
fflush()
This function ignores streams that aren't writeable.
fgets()
The second argument is of type int.
fork()
We've corrected the list of what the child process inherits from its parent.
fs_crypto_domain_add()
FS_CRYPTO_TYPE_CBC isn't currently implemented.
fs_crypto_domain_remove()
The domain doesn't need to be unlocked for you to remove it.
fs_crypto_domain_remove()
The domain doesn't need to be unlocked for you to remove it.
fs_crypto_file_set_domain()
In order for you to assign a domain to a file or directory, the domain must be unlocked.
fs_crypto_migrate_path(), fs_crypto_migrate_tag()
In order for you to tag files for migration, the source and destination domains must be unlocked.
getnameinfo()
NI_WITHSCOPEID is no longer used by this function.
getpagesizes()
We've corrected the example.
getpwent(), getpwent_r(), getpwnam(), getpwnam_r(), getpwuid(), getpwuid_r()
  • We've corrected the description of how these functions indicate errors. The reentrant (*_r()) forms return error codes; the nonreentrant forms set errno.
  • We've corrected the synopsis for getpwnam_r().
getrlimit()
Only a process with the PROCMGR_AID_RLIMIT ability enabled can raise a hard limit.
inet_lnaof(), inet_makeaddr(), inet_netof(), inet_network()
We've corrected the synopsis of these functions.
INET6
You can't specify an address of :: in a call to connect() or sendto() to mean the local host.
InterruptAttach()
We've corrected the caveat about multithreaded resource managers.
InterruptHookIdle2()
Note that the cmd member of the _idle_hook structure isn't a bit field.
InterruptHookTrace()
There are currently no flags that apply to this function.
ioctl()
  • The SIOCDARP, SIOCGARP, and SIOCSARP commands aren't implemented.
  • We've removed the obsolete OSIOCGIFADDR, OSIOCGIFBRDADDR, OSIOCGIFCONF, OSIOCGIFDSTADDR, and OSIOCGIFNETMASK commands. Use the commands without the leading O instead.
iofunc_acl()
We corrected the name of _IO_ACL.
iofunc_attr_unlock()
This function gives an error of EPERM if the caller doesn't own the lock.
iofunc_client_info_able()
This function sets the flags member of the _client_able structure for an ability to 1 if the client has the ability, or 0 if it doesn't. If the client doesn't have all the indicated abilities, this function sets the _NTO_CI_UNABLE bit in the flags member of the _client_info structure.
iofunc_devctl(), iofunc_devctl_default()
These functions return _RESMGR_DEFAULT if they don't recognize the given command, so that your resource manager can then handle the command. If you don't process the command, the client library's devctl() routine returns ENOTTY.
iofunc_mmap()
We've corrected the method to use to determine whether or not the version of procnto you're talking to supports the required_prot member of the io_mmap_t structure.
iofunc_readlink()
We've corrected the description of this function.
iofunc_space_verify()
We corrected the list of errors.
iofunc_sync_verify()
O_RSYNC isn't a valid flag for this function.
iofunc_write_default()
This function indicates that it wrote the requested number of bytes, not zero bytes.
IPv6
Use the IPV6_V6ONLY socket option to make AF_INET6 wildcard listening sockets accept IP6 traffic only.
kill()
For a process to have permission to send a signal to a process, the real or effective user ID of the sending process must match the real or saved set-user ID of the receiving process, or the sending process must have the PROCMGR_AID_SIGNAL ability enabled.
lfind(), lsearch()
We've corrected the synopsis.
lstat(), lstat64()
You can safely call these functions in a multithreaded process.
mallopt()
  • The size used for the MALLOC_MAX_ALIGNMENT command is the largest power of two that's less than or equal to the given value.
  • The nondebug version of this function is now declared in <malloc.h>. The <rcheck/malloc.h> file includes additional commands and settings for the debug version.
mbrlen(), mbrtowc(), mbsrtowcs()
These functions are to use in a multithreaded program if the ps argument isn't NULL.
mbrtowc(), mbsrtowcs(), mbstowcs(), mbtowc()
This functions are affected by LC_CTYPE.
mmap()
  • We've corrected the flags in the example of allocating a physically contiguous DMA buffer for a bus-mastering PCI network card. They should be MAP_SHARED | MAP_PHYS | MAP_ANON.
  • If you set MAP_LAZY, and there's no system memory at the time of the access, the thread gets a SIGBUS with a code of BUS_OBJERR, not BUS_ADRERR.
modem_read()
This function returns 0 if successful, or -1 if an error occurred. If the buffer isn't large enough, modem_read() discards any incoming characters that won't fit in it. It terminates the string in buf with a null character.
MsgCurrent_r()
This function returns 0 on success; if an error occurs, it returns a value from the Errors section.
MsgReceive(), MsgReceivePulse(), MsgReceivePulsev(), MsgReceivev()
These functions have cancellation points.
MsgSend*()
We've corrected the description of the coid argument.
MsgSendPulse()
You can send a pulse to a process if the sending process's real or effective user ID matches the real or effective user ID of the receiving process, or if the calling process has the PROCMGR_AID_CONNECTION ability enabled.
MsgWrite(), MsgWrite_r()
We've corrected the name of EDEADLK.
pathmgr_link()
This function is declared in <sys/pathmgr.h>, and we've corrected the description. You rarely need to call this function directly.
pci_map_irq()
We corrected the name of PCI_UNSUPPORTED_FUNCT.
posix_fadvise(), posix_fallocate()
These functions give an error of EINVAL if the len argument is less than zero; they succeed if len is zero.
posix_memalign()
If an error occurs, this function returns an error code, not -1. It doesn't set errno.
posix_spawn()
We've corrected the description of SPAWN_CHECK_SCRIPT.
posix_spawnattr_setcred()
In order to set the user ID or group ID to something other than the calling process's real user or group ID, the calling process must have the PROCMGR_AID_SPAWN_SETUID or PROCMGR_AID_SPAWN_SETGID ability (or both) set.
printf()
  • The %p conversion type doesn't support the alternate conversion form (#).
  • We've corrected the descriptions of the L length specifier and the effect of the precision specifier on the F type specifier.
procmgr_ability()
  • PROCMGR_AID_RCONSTRAINT isn't a privileged ability.
  • We've corrected the description of PROCMGR_AID_TIMER. It controls the ability to create a timer that sends a pulse to a process belonging to a different user.
procmgr_daemon()
This function sets errno if an error occurs.
procmgr_event_notify(), procmgr_event_notify_delete(), procmgr_event_trigger()
If an error occurs, these functions return -1 and set errno.
procmgr_timer_tolerance()
A process's default tolerance is used when calculating timer tolerance if the timer has neither a specific tolerance nor the TIMER_PRECISE flag set.
pthread_barrierattr_setpshared()
We've corrected the description of the default behavior.
pthread_join(), pthread_timedjoin(), pthread_timedjoin_monotonic()
We've corrected the list of error codes that these functions return.
pthread_kill(), pthread_sigmask()
The PROCMGR_AID_SIGNAL ability doesn't apply to these functions.
pthread_mutex_timedlock(), pthread_mutex_timedlock_monotonic()
It isn't safe to call these functions from a signal handler.
pthread_mutexattr_settype()
In QNX Neutrino, PTHREAD_MUTEX_DEFAULT mutexes are treated in the same way as PTHREAD_MUTEX_ERRORCHECK.
pututline()
This function doesn't return anything.
readblock()
  • Zero is a valid value for the block argument; we've corrected the description for EINVAL.
  • We've corrected the list of error values.
readdir(), readdir_r()
These functions don't give an error of EBADF.
resmgr_attach()
We corrected the name of _FTYPE_ALL.
resmgr_msgreply(), resmgr_msgreplyv()
We've corrected the description of these functions.
rsrcdbmgr_attach(), rsrcdbmgr_create(), rsrcdbmgr_destroy(), rsrcdbmgr_detach(), rsrcdbmgr_devno_attach(), rsrcdbmgr_devno_detach()
In order to successfully use the rsrcdbmgr_*() functions to modify the resource database, your process must have the PROCMGR_AID_RSRCDBMGR ability enabled.
rsrcdbmgr_create()
RSRCMGR_IRQ isn't supported as an alternative to RSRCDBMGR_IRQ.
scandir()
We've corrected the synopsis and description.
SchedCtl()
We've corrected the descriptions of the SCHED_APS_SEC_FLEXIBLE and SCHED_APS_SEC_BASIC security options.
sem_open()
  • It isn't safe to call this function from a signal handler.
  • ENOMEM was missing from the list of possible errors.
setjmp(), sigsetjmp()
These functions return zero if you invoke them directly.
setlocale()
It isn't safe to call this function from a multithreaded program.
setsockopt()
We've corrected the description of the optlen argument. The function sets errno to EINVAL if this size is invalid.
sigaction(), signal()
These functions don't rely on any process manager abilities.
SignalAction_r()
  • SIGPWR is ignored by default.
  • We've corrected the synopsis for SignalAction_r().
sigprocmask()
The PROCMGR_AID_SIGNAL ability doesn't apply to this function.
slogb(), slogf()
These functions don't associate a special meaning with EINVAL.
spawn()
  • We've corrected the name of SPAWN_FDCLOSED.
  • We've corrected the description of SPAWN_CHECK_SCRIPT.
strdup()
This function sets errno if an error occurs.
strsignal()
As a QNX Neutrino extension, this function returns a pointer to an empty string if signo isn't a valid signal number or is the number of a QNX Neutrino signal.
sysmgr_reboot()
If an error occurs, this function returns -1 and sets errno.
sysmgr_runstate(), sysmgr_runstate_dynamic()
These functions don't turn the power on or off for the CPU; they tell the kernel whether or not to schedule threads on it.
tcinject()
This function sets errno to ENOTTY if the fildes argument doesn't refer to a terminal device.
telldir()
You can safely call this function in a multithreaded process.
thread_pool_control(), thread_pool_limits()
It's now all right to have several threads calling these functions with the same thread pool handle.
ThreadCtl()
The _NTO_TCTL_IO and _NTO_TCTL_IO_PRIV commands superlock memory, which generally puts the first thread to use these commands into STATE_WAITPAGE while physical memory is allocated. These calls don't block for other _NTO_TCTL_* commands.
timer_create(), TimerCreate()
In order to create a timer that sends a pulse to a process belonging to a different user, your process must have the PROCMGR_AID_TIMER ability enabled.
timer_getexpstatus(), timer_getoverrun(), timer_gettime()
Your program doesn't need any process manager abilities in order to use these functions.
TimerInfo()
  • We corrected the name of _NTO_TIMER_RESET_OVERRUNS.
  • Your process must have the PROCMGR_AID_TIMER ability enabled only if you're trying to get information about the timers for a process belonging to a different user and you're using the _NTO_TIMER_RESET_OVERRUNS flag.
  • The itime and otime members of the _timer_info structure are of type struct _itimer, not struct itimerspec.
trace_logf(), trace_nlogf(), trace_vnlogf()
  • These functions return the number of bytes written in the log, including the terminating null character, or -1 if an error occurred.
  • It isn't safe to call these functions from a signal handler if the formatting codes or parameters include floating-point elements.
TraceEvent()
The addr argument for _NTO_TRACE_SETBUFFER is of type paddr64_t *, not paddr64_t. The type of the tid argument for _NTO_TRACE_SETCLASSTID and _NTO_TRACE_SETEVENTTID is uint32_t.
traceparser_cs()
We've corrected the description of the arguments to the callback function.
traceparser_get_info()
We corrected the name of _TRACE_HEADER_KEYWORDS.
ualarm()
If the interval argument is nonzero, the alarm is repeated every interval microseconds.
umask()
You can't use this function to change the file-mode creation mask for a process with a different effective user ID, so the PROCMGR_AID_UMASK ability doesn't apply.
valloc()
You should include <malloc.h>, not <stdarg.h>.
wait3(), wait4()
  • You need to include <sys/resource.h> in your source.
  • We've corrected the list of flags that you can set.
waitpid()
We've corrected the list of flags that you can set.
wcrtomb(), wcsrtombs()
These functions are safe to use in a multithreaded program if the ps argument isn't NULL.
wcstoimax(), wcstoumax(), wcstol(), wcstoll(), wcstoul(), wcstoull()
We've corrected the description of what these functions return.
wctomb()
This function isn't safe for you to use in a multithreaded program.
writeblock()
  • Zero is a valid value for the block argument; we've corrected the description for EINVAL.
  • We've corrected the list of error values.