aboutsummaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2003/man3p/glob.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2003/man3p/glob.3p')
-rw-r--r--man-pages-posix-2003/man3p/glob.3p359
1 files changed, 359 insertions, 0 deletions
diff --git a/man-pages-posix-2003/man3p/glob.3p b/man-pages-posix-2003/man3p/glob.3p
new file mode 100644
index 0000000..dc4fa11
--- /dev/null
+++ b/man-pages-posix-2003/man3p/glob.3p
@@ -0,0 +1,359 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "GLOB" 3P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" glob
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.SH NAME
+glob, globfree \- generate pathnames matching a pattern
+.SH SYNOPSIS
+.LP
+\fB#include <glob.h>
+.br
+.sp
+int glob(const char *restrict\fP \fIpattern\fP\fB, int\fP \fIflags\fP\fB,
+.br
+\ \ \ \ \ \ int(*\fP\fIerrfunc\fP\fB)(const char *\fP\fIepath\fP\fB,
+int\fP
+\fIeerrno\fP\fB),
+.br
+\ \ \ \ \ \ glob_t *restrict\fP \fIpglob\fP\fB);
+.br
+void globfree(glob_t *\fP\fIpglob\fP\fB);
+.br
+\fP
+.SH DESCRIPTION
+.LP
+The \fIglob\fP() function is a pathname generator that shall implement
+the rules defined in the Shell and Utilities volume of
+IEEE\ Std\ 1003.1-2001, Section 2.13, Pattern Matching Notation, with
+optional support for rule 3 in the Shell and Utilities volume of IEEE\ Std\ 1003.1-2001,
+Section 2.13.3, Patterns Used for Filename Expansion.
+.LP
+The structure type \fBglob_t\fP is defined in \fI<glob.h>\fP and includes
+at least
+the following members:
+.TS C
+center; l1 l1 l.
+\fBMember Type\fP \fBMember Name\fP \fBDescription\fP
+\fBsize_t\fP \fIgl_pathc\fP Count of paths matched by \fIpattern\fP.
+\fBchar **\fP \fIgl_pathv\fP Pointer to a list of matched pathnames.
+\fBsize_t\fP \fIgl_offs\fP Slots to reserve at the beginning of \fIgl_pathv\fP.
+.TE
+.LP
+The argument \fIpattern\fP is a pointer to a pathname pattern to be
+expanded. The \fIglob\fP() function shall match all
+accessible pathnames against this pattern and develop a list of all
+pathnames that match. In order to have access to a pathname,
+\fIglob\fP() requires search permission on every component of a path
+except the last, and read permission on each directory of any
+filename component of \fIpattern\fP that contains any of the following
+special characters: \fB'*'\fP, \fB'?'\fP, and
+\fB'['\fP .
+.LP
+The \fIglob\fP() function shall store the number of matched pathnames
+into \fIpglob\fP->\fIgl_pathc\fP and a pointer to a
+list of pointers to pathnames into \fIpglob\fP->\fIgl_pathv\fP. The
+pathnames shall be in sort order as defined by the current
+setting of the \fILC_COLLATE\fP category; see the Base Definitions
+volume of IEEE\ Std\ 1003.1-2001, Section 7.3.2, LC_COLLATE. The first
+pointer after the last pathname shall be a null
+pointer. If the pattern does not match any pathnames, the returned
+number of matched paths is set to 0, and the contents of
+\fIpglob\fP->\fIgl_pathv\fP are implementation-defined.
+.LP
+It is the caller's responsibility to create the structure pointed
+to by \fIpglob\fP. The \fIglob\fP() function shall allocate
+other space as needed, including the memory pointed to by \fIgl_pathv\fP.
+The \fIglobfree\fP() function shall free any space
+associated with \fIpglob\fP from a previous call to \fIglob\fP().
+.LP
+The \fIflags\fP argument is used to control the behavior of \fIglob\fP().
+The value of \fIflags\fP is a bitwise-inclusive OR
+of zero or more of the following constants, which are defined in \fI<glob.h>\fP:
+.TP 7
+GLOB_APPEND
+Append pathnames generated to the ones from a previous call to \fIglob\fP().
+.TP 7
+GLOB_DOOFFS
+Make use of \fIpglob\fP->\fIgl_offs\fP. If this flag is set, \fIpglob\fP->\fIgl_offs\fP
+is used to specify how many
+null pointers to add to the beginning of \fIpglob\fP->\fIgl_pathv\fP.
+In other words, \fIpglob\fP->\fIgl_pathv\fP shall
+point to \fIpglob\fP->\fIgl_offs\fP null pointers, followed by \fIpglob\fP->\fIgl_pathc\fP
+pathname pointers, followed by
+a null pointer.
+.TP 7
+GLOB_ERR
+Cause \fIglob\fP() to return when it encounters a directory that it
+cannot open or read. Ordinarily, \fIglob\fP() continues
+to find matches.
+.TP 7
+GLOB_MARK
+Each pathname that is a directory that matches \fIpattern\fP shall
+have a slash appended.
+.TP 7
+GLOB_NOCHECK
+Supports rule 3 in the Shell and Utilities volume of IEEE\ Std\ 1003.1-2001,
+Section 2.13.3, Patterns Used for Filename Expansion. If \fIpattern\fP
+does not
+match any pathname, then \fIglob\fP() shall return a list consisting
+of only \fIpattern\fP, and the number of matched pathnames
+is 1.
+.TP 7
+GLOB_NOESCAPE
+Disable backslash escaping.
+.TP 7
+GLOB_NOSORT
+Ordinarily, \fIglob\fP() sorts the matching pathnames according to
+the current setting of the \fILC_COLLATE\fP category; see
+the Base Definitions volume of IEEE\ Std\ 1003.1-2001, Section 7.3.2,
+LC_COLLATE. When this flag is used, the order of pathnames returned
+is unspecified.
+.sp
+.LP
+The GLOB_APPEND flag can be used to append a new set of pathnames
+to those found in a previous call to \fIglob\fP(). The
+following rules apply to applications when two or more calls to \fIglob\fP()
+are made with the same value of \fIpglob\fP and
+without intervening calls to \fIglobfree\fP():
+.IP " 1." 4
+The first such call shall not set GLOB_APPEND. All subsequent calls
+shall set it.
+.LP
+.IP " 2." 4
+All the calls shall set GLOB_DOOFFS, or all shall not set it.
+.LP
+.IP " 3." 4
+After the second call, \fIpglob\fP->\fIgl_pathv\fP points to a list
+containing the following:
+.RS
+.IP " a." 4
+Zero or more null pointers, as specified by GLOB_DOOFFS and \fIpglob\fP->\fIgl_offs\fP.
+.LP
+.IP " b." 4
+Pointers to the pathnames that were in the \fIpglob\fP->\fIgl_pathv\fP
+list before the call, in the same order as
+before.
+.LP
+.IP " c." 4
+Pointers to the new pathnames generated by the second call, in the
+specified order.
+.LP
+.RE
+.LP
+.IP " 4." 4
+The count returned in \fIpglob\fP->\fIgl_pathc\fP shall be the total
+number of pathnames from the two calls.
+.LP
+.IP " 5." 4
+The application can change any of the fields after a call to \fIglob\fP().
+If it does, the application shall reset them to the
+original value before a subsequent call, using the same \fIpglob\fP
+value, to \fIglobfree\fP() or \fIglob\fP() with the
+GLOB_APPEND flag.
+.LP
+.LP
+If, during the search, a directory is encountered that cannot be opened
+or read and \fIerrfunc\fP is not a null pointer,
+\fIglob\fP() calls (\fI*errfunc\fP()) with two arguments:
+.IP " 1." 4
+The \fIepath\fP argument is a pointer to the path that failed.
+.LP
+.IP " 2." 4
+The \fIeerrno\fP argument is the value of \fIerrno\fP from the failure,
+as set by \fIopendir\fP(), \fIreaddir\fP(), or \fIstat\fP(). (Other
+values may be used to report other errors not explicitly documented
+for those
+functions.)
+.LP
+.LP
+If (\fI*errfunc\fP()) is called and returns non-zero, or if the GLOB_ERR
+flag is set in \fIflags\fP, \fIglob\fP() shall stop
+the scan and return GLOB_ABORTED after setting \fIgl_pathc\fP and
+\fIgl_pathv\fP in \fIpglob\fP to reflect the paths already
+scanned. If GLOB_ERR is not set and either \fIerrfunc\fP is a null
+pointer or (\fI*errfunc\fP()) returns 0, the error shall be
+ignored.
+.LP
+The \fIglob\fP() function shall not fail because of large files.
+.SH RETURN VALUE
+.LP
+Upon successful completion, \fIglob\fP() shall return 0. The argument
+\fIpglob\fP->\fIgl_pathc\fP shall return the number
+of matched pathnames and the argument \fIpglob\fP->\fIgl_pathv\fP
+shall contain a pointer to a null-terminated list of matched
+and sorted pathnames. However, if \fIpglob\fP->\fIgl_pathc\fP is 0,
+the content of \fIpglob\fP->\fIgl_pathv\fP is
+undefined.
+.LP
+The \fIglobfree\fP() function shall not return a value.
+.LP
+If \fIglob\fP() terminates due to an error, it shall return one of
+the non-zero constants defined in \fI<glob.h>\fP. The arguments \fIpglob\fP->\fIgl_pathc\fP
+and
+\fIpglob\fP->\fIgl_pathv\fP are still set as defined above.
+.SH ERRORS
+.LP
+The \fIglob\fP() function shall fail and return the corresponding
+value if:
+.TP 7
+GLOB_ABORTED
+The scan was stopped because GLOB_ERR was set or (\fI*errfunc\fP())
+returned non-zero.
+.TP 7
+GLOB_NOMATCH
+The pattern does not match any existing pathname, and GLOB_NOCHECK
+was not set in flags.
+.TP 7
+GLOB_NOSPACE
+An attempt to allocate memory failed.
+.sp
+.LP
+\fIThe following sections are informative.\fP
+.SH EXAMPLES
+.LP
+One use of the GLOB_DOOFFS flag is by applications that build an argument
+list for use with \fIexecv\fP(), \fIexecve\fP(), or \fIexecvp\fP().
+Suppose, for example, that an application wants to do the equivalent
+of:
+.sp
+.RS
+.nf
+
+\fBls -l *.c
+\fP
+.fi
+.RE
+.LP
+but for some reason:
+.sp
+.RS
+.nf
+
+\fBsystem("ls -l *.c")
+\fP
+.fi
+.RE
+.LP
+is not acceptable. The application could obtain approximately the
+same result using the sequence:
+.sp
+.RS
+.nf
+
+\fBglobbuf.gl_offs = 2;
+glob("*.c", GLOB_DOOFFS, NULL, &globbuf);
+globbuf.gl_pathv[0] = "ls";
+globbuf.gl_pathv[1] = "-l";
+execvp("ls", &globbuf.gl_pathv[0]);
+\fP
+.fi
+.RE
+.LP
+Using the same example:
+.sp
+.RS
+.nf
+
+\fBls -l *.c *.h
+\fP
+.fi
+.RE
+.LP
+could be approximately simulated using GLOB_APPEND as follows:
+.sp
+.RS
+.nf
+
+\fBglobbuf.gl_offs = 2;
+glob("*.c", GLOB_DOOFFS, NULL, &globbuf);
+glob("*.h", GLOB_DOOFFS|GLOB_APPEND, NULL, &globbuf);
+\&...
+\fP
+.fi
+.RE
+.SH APPLICATION USAGE
+.LP
+This function is not provided for the purpose of enabling utilities
+to perform pathname expansion on their arguments, as this
+operation is performed by the shell, and utilities are explicitly
+not expected to redo this. Instead, it is provided for
+applications that need to do pathname expansion on strings obtained
+from other sources, such as a pattern typed by a user or read
+from a file.
+.LP
+If a utility needs to see if a pathname matches a given pattern, it
+can use \fIfnmatch\fP().
+.LP
+Note that \fIgl_pathc\fP and \fIgl_pathv\fP have meaning even if \fIglob\fP()
+fails. This allows \fIglob\fP() to report
+partial results in the event of an error. However, if \fIgl_pathc\fP
+is 0, \fIgl_pathv\fP is unspecified even if \fIglob\fP()
+did not return an error.
+.LP
+The GLOB_NOCHECK option could be used when an application wants to
+expand a pathname if wildcards are specified, but wants to
+treat the pattern as just a string otherwise. The \fIsh\fP utility
+might use this for
+option-arguments, for example.
+.LP
+The new pathnames generated by a subsequent call with GLOB_APPEND
+are not sorted together with the previous pathnames. This
+mirrors the way that the shell handles pathname expansion when multiple
+expansions are done on a command line.
+.LP
+Applications that need tilde and parameter expansion should use \fIwordexp\fP().
+.SH RATIONALE
+.LP
+It was claimed that the GLOB_DOOFFS flag is unnecessary because it
+could be simulated using:
+.sp
+.RS
+.nf
+
+\fBnew = (char **)malloc((n + pglob->gl_pathc + 1)
+ * sizeof(char *));
+(void) memcpy(new+n, pglob->gl_pathv,
+ pglob->gl_pathc * sizeof(char *));
+(void) memset(new, 0, n * sizeof(char *));
+free(pglob->gl_pathv);
+pglob->gl_pathv = new;
+\fP
+.fi
+.RE
+.LP
+However, this assumes that the memory pointed to by \fIgl_pathv\fP
+is a block that was separately created using \fImalloc\fP(). This
+is not necessarily the case. An application should make no assumptions
+about
+how the memory referenced by fields in \fIpglob\fP was allocated.
+It might have been obtained from \fImalloc\fP() in a large chunk and
+then carved up within \fIglob\fP(), or it might have been
+created using a different memory allocator. It is not the intent of
+the standard developers to specify or imply how the memory used
+by \fIglob\fP() is managed.
+.LP
+The GLOB_APPEND flag would be used when an application wants to expand
+several different patterns into a single list.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIexec\fP(), \fIfnmatch\fP(), \fIopendir\fP(), \fIreaddir\fP(),
+\fIstat\fP(), \fIwordexp\fP(), the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, \fI<glob.h>\fP, the Shell and Utilities volume
+of IEEE\ Std\ 1003.1-2001
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .