The next four sections document the straight C interface to attributes,
indices, queries, and file system information. Technically, these
functions are part of the Kernel Kit—their definitions live in
header files in be/kernel, and their code is in
libroot.so.
These functions use a global error variable (an integer), called errno,
to register errors. You can look at the errno value directly in your code
after a file system function fails. Alternatively, you can use the
errno() function which prints, to standard error, its argument followed
by a system-generated string that describes the current state of errno.
Each thread maintains its own errno variable.
errno is only set if there's an error—it never indicates
success.
errno is never cleared. If call A fails and then you call B, C, and
D, errno will still record the error from A.