Successivo: , Precedente: , Su: Esempi di estensione   [Contenuti][Indice]


17.7.2 Un’interfaccia a fnmatch()

Quest’estensione fornisce un’interfaccia per utilizzare la funzione di libreria C fnmatch(). Si usa così:

@load "fnmatch"

È questo il modo per caricare l’estensione.

risultato = fnmatch(pattern, stringa, flags)

Il valore restituito è zero se tutto va bene, oppure FNM_NOMATCH se la funzione non ha trovato alcuna corrispondenza, o un valore differente, diverso da zero, se si è verificato un errore.

Oltre a rendere disponibile la funzione fnmatch(), l’estensione di fnmatch definisce una costante (FNM_NOMATCH), e un vettore con dei valori di flag, di nome FNM.

Gli argomenti per fnmatch() sono:

pattern

L’espressione regolare con cui confrontare nome-file

stringa

La stringa nome-file

flags

Può valere zero o essere l’OR bit a bit di uno o più flag nel vettore FNM

I flag sono i seguenti:

Elemento del vettoreFlag corrispondente definito da fnmatch()
FNM["CASEFOLD"]FNM_CASEFOLD
FNM["FILE_NAME"]FNM_FILE_NAME
FNM["LEADING_DIR"]FNM_LEADING_DIR
FNM["NOESCAPE"]FNM_NOESCAPE
FNM["PATHNAME"]FNM_PATHNAME
FNM["PERIOD"]FNM_PERIOD

Ecco un esempio:

@load "fnmatch"
…
flags = or(FNM["PERIOD"], FNM["NOESCAPE"])
if (fnmatch("*.a", "pippo.c", flags) == FNM_NOMATCH)
    print "nessuna corrispondenza"