glob [ MPE/iX Developer's Kit Reference Manual Volume I ] MPE/iX 5.0 Documentation
MPE/iX Developer's Kit Reference Manual Volume I
glob
Generate path name list matching pattern.
Syntax
#include <glob.h>
int glob(const char *pattern, int flags,
int (*errfunc)(const char *name, int errno),
glob_t *paths);
Parameters
pattern is a string giving a path name pattern, possibly
containing wild card characters and other path name
generation constructs.
flags is a collection of flags controlling the glob()
action. Flags are specified by ORing together
symbolic constants defined in <glob.h>. Possible
symbols are:
GLOB_APPEND appends path names to an
existing paths list generated
by a previous call to glob().
GLOB_DOOFFS uses the gl_offs field in the
glob_t structure paths.
GLOB_ERR tells glob() to return when it
encounters a directory it
cannot open or read. By
default, glob() continues to
look for matches (see also
errfunc.)
GLOB_MARK distinguishes between
directories and files with
names that match pattern by
putting a slash (/) after
directory names.
GLOB_NOCHECK takes a special action if no
path names match pattern. By
default, glob() returns a null
list if there are no path
names matching pattern.
However, if GLOB_NOCHECK is
specified, glob() returns a
list consisting only of
pattern and indicates that the
number of matched path names
is 1. You might use this
option if an argument can be
either a path name or a normal
string.
GLOB_NOESCAPE turns off escape character
functionality. By default,
glob() treats a backslash (\)
as the escape character.
GLOB_NOSORT does not sort matching path
names. By default, glob()
sorts the path names according
to the current locale's
collating sequence.
errfunc is a function to be called if glob() finds a
directory that cannot be opened or read. If the
errfunc pointer is NULL, glob() ignores such
directories; otherwise, glob() calls the function
indicated by errfunc, passing two arguments:
* a const char * giving the name of the
directory that could not be opened or read;
* an int giving the value of errno set by the
function that tried to open or read the
directory. This function could be opendir(),
readdir(), or stat().
paths points to an area where glob() can store a glob_t
structure. This structure gives the list of path
names matching pattern and other information. It
must be created by the caller.
Description
glob() generates a list of all accessible path names matching pattern.
For access to a path name, glob() must have search permission on every
component of the path name except the last, and must have read permission
on the parent directory of each filename component of pattern that
contains any of the wild card characters *, ?, or [.
The path name list is given using a glob_t structure. This structure has
the following fields:
size_t is the number of path names that match pattern. This is zero
gl_pathc if glob() finds no matching path names. However, if
GLOB_NOCHECK is specified, gl_pathc is always 1, as discussed
under the description of GLOB_NOCHECK in the Parameters
section. This field is set by glob().
char points to a list of strings giving the path names that matched
**gl_pathv pattern. The first pointer after the last path name is NULL.
This field is set by glob().
size_t tells how many NULL pointers you want at the beginning of the
gl_offs gl_pathv list. This creates a specified amount of blank space
at the beginning of gl_pathv that can be used for other
purposes. For example, you might fill this space with other
arguments before passing the whole gl_pathv vector as an
argument to a function like execv().
Before calling glob(), set gl_offs to the number of NULL pointers that
glob() inserts in the gl_pathv list. These NULL pointers precede the
pointers to the strings which identify path names that match pattern.
glob() only uses the value in gl_offs if you have set GLOB_DOOFFS in
flags.
If GLOB_APPEND is specified to add new path names to an existing list,
glob() follows these rules:
* If GLOB_DOOFFS is set in the first call to glob(), it must be set
in subsequent calls and gl_offs must have the same value in each
call;
* If GLOB_DOOFFS is not set in the first call, it must not be set in
subsequent calls;
* After the second call, gl_pathv points to a list containing:
* The number of NULL pointers as determined by GLOB_DOOFFS
and gl_offs;
* Pointers to the path names that were in the list before the
second call, in the same order as before;
* Pointers to the new path names obtained by the second call,
in the order dictated by the flags for the second call.
* gl_pathc gives the total number of path names from all the calls.
The application should not change gl_pathc or gl_pathv between calls.
As noted earlier, the function given by (*errfunc) () is called if glob()
encounters a directory that cannot be opened or read. If (*errfunc) ()
returns non-zero or if GLOB_ERR is set in flags, glob() sets paths to
reflect the path names already obtained, then returns with a result of
GLOB_ABORTED. (This symbolic constant is defined in <glob.h>.) If
GLOB_ERR is not specified and if either errfunc is NULL or (*errfunc) ()
returns zero, glob() ignores the error and continues searching for
matching path names.
Return Values
0 Completes successfully
Error Not successful
Value
If glob() terminates prematurely with one of these errors, it still sets
paths->gl_pathc and paths->gl_pathv to show whatever path names it has
already found.
Once a program has finished using the paths structure, it should use
globfree() to free up the space used to store the path name list.
Errors
If an error occurs, errno is set to one of the following values:
GLOB_NOSPACE CAUSE glob() was unable to allocate memory for at least one
of the path names obtained.
ACTION Free up more memory.
GLOB_NOMATCH CAUSE glob() did not find any path names which matched
pattern and GLOB_NOCHECK was not set in the flags.
ACTION No action required.
GLOB_ABORTED CAUSE glob() stopped because GLOB_ERR was set (perhaps a
directory could not be opened or read), or because
(*errfunc) () returned non-zero.
ACTION Check that the offending directory exists, that it
was named properly, and that you have appropriate
permissions.
See Also
fnmatch(), globfree()
MPE/iX 5.0 Documentation