regexps.com
These functions provide higher-level abstractions that capture common ways of using the lower-level VU functions.
int vu_file_to_string (int * errn,
                       t_uchar ** buf,
                       size_t * len,
                       int fd);
Read the entire contents of fd
 into a newly allocated string.
If no error occurs, return 0
.  The new string is returned in *buf
;
its length in *len
.
If an I/O error occurs, return -1
 and fill *errn
.
If vu_fstat
 is able to report the length of the file, a single call to 
vu_read_retry
 is used to read its contents.  Otherwise, repeated calls
to vu_read_retry
 are used.
int vu_move_fd (int * errn, int fd, int newfd);
Relocate fd
 to newfd
.  fd
 must already be handled by VU.
Thus function performs a vu_dup
 or vu_dup2
This is useful when performing file redirections after fork
 and
before exec
.
int vu_file_is_directory (int * errn, t_uchar * name);
Return 1
 if name
 names a directory, 0
 if not, -1
 on error.
Non-existence of any file called name
 is not an error.
Function 
vu_file_is_directory_following
int vu_file_is_directory_following (int * errn, t_uchar * name);
Return 1
 if name
 names a directory or symlink to a directory, 
0
 if not, -1
 on error.
Non-existence of any file called name
 is not an error.
regexps.com