// Если число масок ограничено, то можно попытаться сделать наподобие этого примера
// пример использования scandir взят из man scandir
// strcmp заменить на fnmatch
// test1.cpp
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <stdlib.h>
struct Mask1
{
static const char *name()
{
return "test1.cpp";
}
};
struct Mask2
{
static const char *name()
{
return "test2.cpp";
}
};
template<class M>
struct FnMacher
{
static int filter(const struct dirent *entry)
{
const char *name = entry->d_name;
int r = strcmp(name, M::name());
return (r == 0);
}
};
int main()
{
struct dirent **namelist;
int n = scandir(".", &namelist, &FnMacher<Mask1>::filter, 0);
if (n < 0)
perror("scandir");
else
{
while (n--)
{
printf("Mask1: %s\n", namelist[n]->d_name);
free(namelist[n]);
}
free(namelist);
}
n = scandir(".", &namelist, &FnMacher<Mask2>::filter, 0);
if (n < 0)
perror("scandir");
else
{
while (n--)
{
printf("Mask2: %s\n", namelist[n]->d_name);
free(namelist[n]);
}
free(namelist);
}
return 0;
}