Проверить, соответствует ли имя файла (путь к файлу) заданному шаблону
#include <fnmatch.h>int fnmatch( const char *pat,const char *str,int flags );
FNM_PATHNAME:
FNM_PATHNAME
установлен, точка является ведущей, если она является первым символом str или следует сразу за (/). FNM_PATHNAME
не установлен, точка является ведущей только если он является первым символом str. FNM_QUOTE
установлен, (\) интерпретируется как обычный символ. libc
Функция fnmatch() проверяет, соответствует ли имя или путь к файлу, определенное в аргументе str, шаблону, определенному аргументом pat.
Специальные символы сопоставления в шаблонах
Специальный символ сопоставления в шаблонах в кавычках - шаблон, совпадающий с самим специальным символом. Если символ не заключен в кавычки, он имеет специальное значение для шаблона. Специальные символы сопоставления в шаблонах и контексты, в которых они имеют особое значение, следующие:
Объединение шаблонов, соответствующих одиночному символу, является корректным шаблоном, который соответствует объединению отдельных символов или элементов, совпадающих с каждым из объединенных шаблонов. Например, шаблон a[bc] соответствует строкам ab и ac.
Объединение одного или более шаблонов, соответствующих одиночному символу, с одной или болеее звездочек (*) явялется корректным шаблоном. В подобных шаблонах каждая звездочка соответствует строке из нуля или более символов, вплоть до первого символа, который соответствует символу, следующему за звездочкой в шаблоне. Например, шаблон a*d соответствует строкам ad, abd и abcd, но не строке abc.
Если звездочка является первым или последним символом шаблона, она соответствует нулю или более символов, которые предшествуют или следуют за символами, совпадающими с отсальной частью шаблона. Например, шаблон a*d* соответствует строкам ad, abcd, abcdef, aaaad и adddd; шаблон *a*d соответствует строкам ad, abcd, efabcd, aaaad и adddd.
/** The following example accepts a set of patterns* for filenames as argv[1..argc]. It reads lines* from standard input and outputs the lines that* match any of the patterns.*/#include <stdio.h>#include <fnmatch.h>#include <stdlib.h>#include <limits.h>int main( int argc, char **argv ){int i;char buffer[PATH_MAX+1];while ( gets( buffer ) ){for ( i = 0; i < argc; i++ ){if ( fnmatch( argv[i], buffer, 0 ) == 0 ){puts( buffer );break;}}}exit( EXIT_SUCCESS );}
POSIX 1003.1
Предыдущий раздел: Описание API системной библиотеки