fnmatch.h - Linux
Overview
The fnmatch.h
header file in Linux provides a collection of functions for performing wildcard pattern matching. It is used to determine if a string matches a wildcard pattern, where the pattern can contain wildcard characters like *
(matches any number of characters) and ?
(matches any single character).
Syntax
#include <fnmatch.h>
int fnmatch(const char *pattern, const char *string, int flags);
Options/Flags
| Flag | Description |
|—|—|
| FNM_NOESCAPE
| Disable backslash () as an escape character |
| FNM_PATHNAME
| Treat the string as a pathname |
| FNM_PERIOD
| Match leading period (.) in filename |
| FNM_CASEFOLD
| Perform case-insensitive matching |
Examples
Simple Matching:
const char *pattern = "*.txt";
const char *string = "file.txt";
if (fnmatch(pattern, string, 0) == 0) {
printf("Match found!\n");
}
Matching with Flags:
const char *pattern = "x?y";
const char *string = "xyz";
if (fnmatch(pattern, string, FNM_CASEFOLD) == 0) {
printf("Case-insensitive match found!\n");
}
Matching Pathnames:
const char *pattern = "/home/*/*";
const char *string = "/home/user/Documents/file.txt";
if (fnmatch(pattern, string, FNM_PATHNAME) == 0) {
printf("Pathname match found!\n");
}
Common Issues
- Invalid Patterns: Patterns with unbalanced parentheses or invalid characters can lead to runtime errors.
- Case Sensitivity: By default,
fnmatch
is case-sensitive. UseFNM_CASEFOLD
to perform case-insensitive matching. - Special Characters: Backslashes (
\
) are treated as escape characters by default. UseFNM_NOESCAPE
to disable this behavior.
Integration
- Shell Scripts:
fnmatch
can be used to perform wildcard matching in shell scripts to filter file listings, search for specific files, and more. - Programming Languages:
fnmatch
can be integrated into C and C++ programs to add wildcard matching functionality.
Related Commands
glob
: Provides a similar wildcard matching functionality, but can also expand matched patterns.regex
: Provides regular expression matching capabilities, offering more advanced pattern matching options.