Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
GLOB(3)			    Library Functions Manual		       GLOB(3)

NAME
       glob, glob_b, globfree -- generate pathnames matching a pattern

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<glob.h>

       int
       glob(const      char	*     restrict	   pattern,	int	flags,
	   int	   (*errfunc)(const	char	 *epath,      int      errno),
	   glob_t * restrict pglob);

       int
       glob_b(const	char	 *     restrict	    pattern,	 int	flags,
	   int	   (^errblk)(const     char	 *epath,      int      errno),
	   glob_t * restrict pglob);

       void
       globfree(glob_t *pglob);

DESCRIPTION
       The  glob()  function is	a pathname generator that implements the rules
       for file	name pattern matching used by the shell.

       The include file	<glob.h> defines the structure type glob_t, which con-
       tains 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  pat-
       tern  and creates a list	of the pathnames that match.  In order to have
       access to a pathname, glob() requires search permission on every	compo-
       nent 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 de-
       fined in	<glob.h>:

       GLOB_APPEND	Append pathnames generated to the ones from a previous
			call (or calls)	to glob().  The	value of gl_pathc will
			be the total matches found by this call	and the	previ-
			ous  call(s).	The  pathnames	are  appended  to, not
			merged with the	pathnames  returned  by	 the  previous
			call(s).   Between  calls,  the	caller must not	change
			the setting of the GLOB_DOOFFS flag,  nor  change  the
			value  of  gl_offs when	GLOB_DOOFFS is set, nor	(obvi-
			ously) call globfree() for pglob.

       GLOB_DOOFFS	Make use of the	gl_offs	field.	If this	flag  is  set,
			gl_offs	 is  used to specify how many NULL pointers to
			prepend	to the beginning of the	 gl_pathv  field.   In
			other  words,  gl_pathv	 will  point  to  gl_offs NULL
			pointers, followed by gl_pathc pathname	pointers, fol-
			lowed by a NULL	pointer.

       GLOB_ERR		Causes glob() to return	when it	encounters a directory
			that it	cannot open or read.  Ordinarily, glob()  con-
			tinues to find matches.

       GLOB_MARK	Each pathname that is a	directory that matches pattern
			has a slash appended.

       GLOB_NOCHECK	If  pattern  does  not match any pathname, then	glob()
			returns	a list consisting of only  pattern,  with  the
			number	of total pathnames set to 1, and the number of
			matched	pathnames set to 0.  The effect	 of  backslash
			escaping is present in the pattern returned.

       GLOB_NOESCAPE	By default, a backslash	(`\') character	is used	to es-
			cape  the following character in the pattern, avoiding
			any  special  interpretation  of  the  character.   If
			GLOB_NOESCAPE is set, backslash	escaping is disabled.

       GLOB_NOSORT	By default, the	pathnames are sorted in	ascending col-
			lation	order; this flag prevents that sorting (speed-
			ing up glob()).

       The following values may	also be	included in flags, however,  they  are
       non-standard extensions to IEEE Std 1003.2 ("POSIX.2").

       GLOB_ALTDIRFUNC	The following additional fields	in the pglob structure
			have  been  initialized	 with  alternate functions for
			glob to	use to open, read, and close  directories  and
			to get stat information	on names found in those	direc-
			tories.

			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.

       GLOB_BRACE	Pre-process   the    pattern	string	  to	expand
			`{pat,pat,...}'	strings	like csh(1).  The pattern `{}'
			is  left unexpanded for	historical reasons (and	csh(1)
			does the same thing to ease  typing  of	 find(1)  pat-
			terns).

       GLOB_MAGCHAR	Set  by	 the  glob()  function if the pattern included
			globbing characters.  See the description of the usage
			of the gl_matchc structure member for more details.

       GLOB_NOMAGIC	Is the same as GLOB_NOCHECK but	it  only  appends  the
			pattern	 if  it	 does  not  contain any	of the special
			characters ``*'', ``?''	 or  ``[''.   GLOB_NOMAGIC  is
			provided  to simplify implementing the historic	csh(1)
			globbing behavior and should probably not be used any-
			where else.

       GLOB_TILDE	Expand patterns	that start with	`~' to user name  home
			directories.

       GLOB_LIMIT	Limit  the  total  number of returned pathnames	to the
			value provided in gl_matchc (default  ARG_MAX).	  This
			option	should be set for programs that	can be coerced
			into a denial of service attack	via patterns that  ex-
			pand to	a very large number of matches,	such as	a long
			string of `*/../*/..'.

       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 glob_b() function is	like glob() except that	the error callback  is
       a block pointer instead of a function pointer.

       The  globfree()	function  frees	any space associated with pglob	from a
       previous	call(s)	to glob() or glob_b().

RETURN VALUES
       On successful completion, glob()	and glob_b() return  zero.   In	 addi-
       tion, the fields	of pglob contain the values described below:

       gl_pathc	     contains  the  total  number of matched pathnames so far.
		     This includes other matches from previous invocations  of
		     glob() or glob_b()	if GLOB_APPEND was specified.

       gl_matchc     contains  the  number of matched pathnames	in the current
		     invocation	of glob() or glob_b().

       gl_flags	     contains a	copy  of  the  flags  argument	with  the  bit
		     GLOB_MAGCHAR  set if pattern contained any	of the special
		     characters	``*'', ``?'' or	``['', cleared if not.

       gl_pathv	     contains a	pointer	to a NULL-terminated list  of  matched
		     pathnames.	 However, if gl_pathc is zero, the contents of
		     gl_pathv are undefined.

       If glob() or glob_b() terminates	due to an error, it sets errno and re-
       turns one of the	following non-zero constants, which are	defined	in the
       include file <glob.h>:

       GLOB_NOSPACE  An	 attempt  to  allocate	memory failed, or if errno was
		     E2BIG,  GLOB_LIMIT	 was  specified	 in  the   flags   and
		     pglob->gl_matchc or more patterns were matched.

       GLOB_ABORTED  The scan was stopped because an error was encountered and
		     either  GLOB_ERR  was  set	 or (*errfunc)() returned non-
		     zero.

       GLOB_NOMATCH  The pattern did not match a pathname and GLOB_NOCHECK was
		     not set.

       The arguments pglob->gl_pathc and  pglob->gl_pathv  are	still  set  as
       specified above.

EXAMPLES
       A  rough	equivalent of `ls -l *.c *.h' can be obtained with the follow-
       ing 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);

CAVEATS
       The glob() and glob_b() functions will not match	filenames  that	 begin
       with a period unless this is specifically requested (e.g., by ".*").

SEE ALSO
       sh(1), fnmatch(3), regex(3)

STANDARDS
       The  current  implementation of the glob() function does	not conform to
       IEEE Std	1003.2 ("POSIX.2").  Collating symbol expressions, equivalence
       class expressions and character class expressions are not supported.

       The  flags  GLOB_ALTDIRFUNC,  GLOB_BRACE,   GLOB_LIMIT,	 GLOB_MAGCHAR,
       GLOB_NOMAGIC, and GLOB_TILDE, and the fields gl_matchc and gl_flags are
       extensions to the POSIX standard	and should not be used by applications
       striving	for strict conformance.

HISTORY
       The  glob()  and	 globfree()  functions	first appeared in 4.4BSD.  The
       glob_b()	function first appeared	in FreeBSD 15.0.

BUGS
       Patterns	longer than MAXPATHLEN may cause unchecked errors.

       The glob() and glob_b() functions 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).

FreeBSD	15.0			 June 23, 2025			       GLOB(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=glob&sektion=3&manpath=FreeBSD+15.0-RELEASE+and+Ports>

home | help