![]() |
Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* globit.c - globs all of its arguments, and displays the matches */
#include <errno.h>
#include <glob.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
/* This is the error function we pass to glob(). It just displays
an error and returns success, which allows the glob() to
continue. */
int errfn(const char * pathname, int theerr) {
fprintf(stderr, "error accessing %s: %s\n", pathname,
strerror(theerr));
/* We want the glob operation to continue, so return 0 */
return 0;
}
int main(int argc, char ** argv) {
glob_t result;
int i, rc, flags;
if (argc < 2) {
printf("at least one argument must be given\n");
return 1;
}
/* set flags to 0; it gets changed to GLOB_APPEND later */
flags = 0;
/* iterate over all of the command-line arguments */
for (i = 1; i < argc; i++) {
rc = glob(argv[i], flags, errfn, &result);
/* GLOB_ABEND can't happen thanks to errfn */
if (rc == GLOB_NOSPACE) {
fprintf(stderr, "out of space during glob operation\n");
return 1;
}
flags |= GLOB_APPEND;
}
if (!result.gl_pathc) {
fprintf(stderr, "no matches\n");
rc = 1;
} else {
for (i = 0; i < result.gl_pathc; i++)
puts(result.gl_pathv[i]);
rc = 0;
}
/* the glob structure uses memory from the malloc() pool, which
needs to be freed */
globfree(&result);
return rc;
}