---
name: "fnmatch"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/fnmatch"
---

# fnmatch(3)

test whether a filename or pathname matches a shell-style pattern

## NAME

**fnmatch** – test whether a filename or pathname matches a shell-style pattern

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<fnmatch.h\>**

*int*\

**fnmatch**(*const char \*pattern*, *const char \*string*, *int flags*);

## DESCRIPTION

The **fnmatch**() function matches patterns according to the rules used by the shell. It checks the string specified by the *string* argument to see if it matches the pattern specified by the *pattern* argument.

The *flags* argument modifies the interpretation of *pattern* and *string*. The value of *flags* is the bitwise inclusive OR of any of the following constants, which are defined in the include file ⟨fnmatch.h⟩.

- FNM\_NOESCAPE

  Normally, every occurrence of a backslash (‘\\’) followed by a character in *pattern* is replaced by that character. This is done to negate any special meaning for the character. If the FNM\_NOESCAPE flag is set, a backslash character is treated as an ordinary character.

- FNM\_PATHNAME

  Slash characters in *string* must be explicitly matched by slashes in *pattern*. If this flag is not set, then slashes are treated as regular characters.

- FNM\_PERIOD

  Leading periods in *string* must be explicitly matched by periods in *pattern*. If this flag is not set, then leading periods are treated as regular characters. The definition of “leading” is related to the specification of FNM\_PATHNAME. A period is always “leading” if it is the first character in *string*. Additionally, if FNM\_PATHNAME is set, a period is leading if it immediately follows a slash.

- FNM\_LEADING\_DIR

  Ignore “/\*” rest after successful *pattern* matching.

- FNM\_CASEFOLD

  Ignore case distinctions in both the *pattern* and the *string*.

## RETURN VALUES

The **fnmatch**() function returns zero if *string* matches the pattern specified by *pattern*, otherwise, it returns the value FNM\_NOMATCH.

## SEE ALSO

[sh(1)](/sh/1.md), [glob(3)](/glob/3.md), [regex(3)](/regex/3.md)

## STANDARDS

The current implementation of the **fnmatch**() function is expected to conform to IEEE Std 1003.2 (“POSIX.2”).

## HISTORY

A predecessor to **fnmatch**(), **gmatch**(), first appeared in the Programmer's Workbench (PWB/UNIX). The **fnmatch**() function first appeared in 4.4BSD.

## BUGS

The pattern ‘\*’ matches the empty string, even if FNM\_PATHNAME is specified.
