GLOB(3) | Library Functions Manual | GLOB(3) |
int
glob(const char * restrict pattern, int flags, int (*errfunc)(const char *, int), glob_t * restrict pglob);
void
globfree(glob_t *pglob);
int
glob_pattern_p(const char *pattern, int quote);
The include file glob.h defines the structure type glob_t, which contains at least the following fields:
typedef struct { size_t gl_pathc; /* count of total paths so far */ size_t gl_matchc; /* count of paths matching pattern */ size_t gl_offs; /* reserved at beginning of gl_pathv */ int gl_flags; /* returned flags */ char **gl_pathv; /* list of paths matching pattern */ } glob_t;
The argument pattern is a pointer to a pathname pattern to be expanded. The glob() argument matches all accessible pathnames against the pattern and creates a list of the pathnames that match. In order to have access to a pathname, glob() requires search permission on every component of a path except the last and read permission on each directory of any filename component of pattern that contains any of the special characters ‘*
', ‘?
' or ‘[
'.
The glob() argument stores the number of matched pathnames into the gl_pathc field, and a pointer to a list of pointers to pathnames into the gl_pathv field. The first pointer after the last pathname is NULL. If the pattern does not match any pathnames, the returned number of matched paths is set to zero.
It is the caller's responsibility to create the structure pointed to by pglob. The glob() function allocates other space as needed, including the memory pointed to by gl_pathv.
The argument flags is used to modify the behavior of glob(). The value of flags is the bitwise inclusive OR of any of the following values defined in glob.h:
The following values may also be included in flags, however, they are non-standard extensions to IEEE Std 1003.2 (“POSIX.2”).
void *(*gl_opendir)(const char * name); struct dirent *(*gl_readdir)(void *); void (*gl_closedir)(void *); int (*gl_lstat)(const char *name, struct stat *st); int (*gl_stat)(const char *name, struct stat *st);
This extension is provided to allow programs such as restore(8) to provide globbing from directories stored on tape.
{pat,pat,...}
' strings like csh(1). The pattern ‘{}
' is left unexpanded for historical reasons (csh(1) does the same thing to ease typing of find(1) patterns).\
') character for quoting.~
' to user name home directories.64K
, the number of stat(2) calls to 128, and the number of readdir(3) calls to 16K. This option should be set for programs that can be coerced to a denial of service attack via patterns that expand to a very large number of matches, such as a long string of */../*/..
.
' and ‘..
' from metacharacter matches, regardless of whether GLOB_PERIOD is set and whether the pattern component begins with a literal period. GLOB_STAR Indicates that two adjacent *
characters will do a recursive match in all subdirs, without following symbolic links and three adjacent *
characters will also follow symbolic links.
If, during the search, a directory is encountered that cannot be opened or read and errfunc is non-NULL, glob() calls (*errfunc)(path, errno). This may be unintuitive: a pattern like ‘*/Makefile
' will try to stat(2) ‘foo/Makefile
' even if ‘foo
' is not a directory, resulting in a call to errfunc. The error routine can suppress this action by testing for ENOENT and ENOTDIR; however, the GLOB_ERR flag will still cause an immediate return when this happens.
If errfunc returns non-zero, glob() stops the scan and returns GLOB_ABORTED after setting gl_pathc and gl_pathv to reflect any paths already matched. This also happens if an error is encountered and GLOB_ERR is set in flags, regardless of the return value of errfunc, if called. If GLOB_ERR is not set and either errfunc is NULL or errfunc returns zero, the error is ignored.
The globfree() function frees any space associated with pglob from a previous call(s) to glob().
The glob_pattern_p() returns 1 if the pattern has any special characters that glob() will interpret and 0 otherwise. If the quote argument is non-zero, then backslash quoted characters are ignored.
The historical GLOB_QUOTE flag is no longer supported. Per IEEE Std 1003.2-1992 (“POSIX.2”), backslash escaping of special characters is the default behaviour; it may be disabled by specifying the GLOB_NOESCAPE flag.
If glob() terminates due to an error, it sets errno and returns one of the following non-zero constants, which are defined in the include file <glob.h>:
GLOB_LIMIT
was specified in the flags and ARG_MAX
patterns were matched.The historical GLOB_ABEND return constant is no longer supported. Portable applications should use the GLOB_ABORTED constant instead.
The arguments pglob->gl_pathc and pglob->gl_pathv are still set as specified above.
ls -l *.c *.h
' can be obtained with the following code:
glob_t g; g.gl_offs = 2; glob("*.c", GLOB_DOOFFS, NULL, &g); glob("*.h", GLOB_DOOFFS | GLOB_APPEND, NULL, &g); g.gl_pathv[0] = "ls"; g.gl_pathv[1] = "-l"; execvp("ls", g.gl_pathv);
The glob() function may fail and set errno for any of the errors specified for the library routines stat(2), closedir(3), opendir(3), readdir(3), malloc(3), and free(3).
November 30, 2010 | NetBSD 6.1 |