Home / Programmazione / C - C++ / Listare file ricorsivamente in Linux con C++
Mattepuffo

Listare file ricorsivamente in Linux con C++

Listare file ricorsivamente in Linux con C++

Vediamo un piccolo snippet C++ per listare ricorsivamente i files in C++.

Questo funziona sotto Linux (e probabilmente sotto Mac OS X), ma non dovrebbe funzionare sotto Windows.

Il motivo è che usremo ftw; dalla man page:

NAME
       ftw, nftw - file tree walk

SYNOPSIS
       #include

       int nftw(const char *dirpath,
               int (*fn) (const char *fpath, const struct stat *sb,
                          int typeflag, struct FTW *ftwbuf),
               int nopenfd, int flags);

       #include

       int ftw(const char *dirpath,
               int (*fn) (const char *fpath, const struct stat *sb,
                          int typeflag),
               int nopenfd);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       nftw(): _XOPEN_SOURCE >= 500

Ma di sicuro per Windows ci sono altre librerie standard.

Comunque ecco l'esempio:

#include
#include

using namespace std;

int callback(const char *path, const struct stat *st, int flags) {
    cout << st->st_uid << "  " << st->st_gid << "  " << path << "n";
    return 0;
}

int main(int argc, const char *argv[]) {
    return ftw("/etc", callback, 1);
}

In pratica alla funzione ftw passiamo tre argomenti:

  • il path iniziale
  • una funzione di callback
  • il numero di directory che ftw apre simultaneamente

Quello che ho notato, avendo scansionato la stessa directory in altri linguaggi, è la velocità di esecuzione.

Non usando praticamente mai C++, ne sono entusiasta (anche se so che non dovrei).

Enjoy!