% limb manual
% open_b(3)
% limb 0.1.0
% 2023-07-24
# NAME
open_b, open_atb - open a file using given function then clears *O_NONBLOCK*
# SYNOPSIS
#include <limb/djbunix.h>
```pre hl
int open_b(open_fn <em>fn</em>, const char *<em>file</em>)
int open_atb(openat_fn <em>fnat</em>, int <em>fd</em>, const char *<em>file</em>)
```
# DESCRIPTION
The `open_b`() function calls the function `fn` with `file` as its only
argument. This function should open the file whose name is pointed by `file` and
return the corresponding file descriptor on success, otherwise it should return
-1 and set `errno` to indicate the error.
After the file has been successfully opened, the `open_b`() function will ensure
that it is in blocking mode, i.e. that it has *O_NONBLOCK* clear.
The `open_atb`() function is similar except that it takes an additional argument
`fd` being used along side `file` as arguments to the function `fnat`, which
must be similar to `fn` except when `file` is a relative path, in which case it
must be treated as relative to the directory associated with the file
descriptor `fd`, which may be *AT_FDCWD* to user the current working directory.
# RETURN VALUE
On success, these functions return the opened file descriptor, which always has
the *O_NONBLOCK* flag clear. Otherwise they return -1 and set `errno` to
indicate the error.
# ERRORS
The `open_b`() and `open_atb`() functions may fail and set `errno` for any of
the errors specified for the given `fn` or `fnat` function, respectively.
They may also fail and set `errno` for the errors described for [ndelay_off](3).