No caigo en ninguna función estándar que te permita hacerlo desde C tanto para Windows como para Linux.
En algunos sistemas tienes funciones como "FindFirst" para buscar el primer fichero que cumple una cierta condición y "FindNext" para el segundo y sucesivos. Además, si tienes que mirar también en los subdirectorios, deberías también comprar los atributos, para proseguir la búsqueda de forma recursiva. Yo tenía algún fuente que lo hacía para Turbo C.
Hoy en día, suelo complicarme menos la vida y pasar parte del trabajo al sistema operativo (algo que quizá no te permitan hacer si se trata de un proyecto para la universidad o tu centro de estudios). Suelo hacer cosas como:
system("ls -R > listaFicheros")
y luego ese "listaFicheros" ya lo puedes manipular desde tu programa. También puedes afinar la búsqueda con "grep", etc.
Nota: "ls" es una utilidad de la familia Unix (incluyendo Linux); en Windows se usaría "dir". En cuanto a "grep", que es para que te muestre sólo los que contengan cierto texto, sí existen versiones para Windows.