|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Espressioni regolari
Ciao a tutti!!
Devo implementare una shell minimale. Tra le caratteristiche di tale shell c'è anche il filename expansion. Il prof. ci ha consigliato di usare la libreria regex.h per trattare le varie espressioni regolari. Il problema è che non ho capito bene cosa fanno le funzione regcomp() e regexec() (ed anche su internet le informazioni a riguardo sono molto scarse). Cioè se io sto sulla shell e gli invio questo comando: > rm *.dat Come faccio a fargli interpretare l'asterisco attraverso quelle due funzioni? Grazie. ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quindi se non ci sono delle necessità particolari, trovo poco utile dover utilizzare una libreria apposita per le espressioni regolari. In Linux esiste una funzione, molto più semplice e comoda: glob(). Che fa il pattern-matching sui file esattamente secondo le regole della shell. Esempio: Codice:
#include <stdio.h> #include <glob.h> int main (void) { int ret, i; glob_t gl; ret = glob ("*.txt", GLOB_ERR | GLOB_NOSORT, NULL, &gl); if (ret == 0) { for (i = 0; i < gl.gl_pathc; i++) printf ("Trovato: %s\n", gl.gl_pathv[i]); globfree (&gl); } else printf ("Errore\n"); return 0; }
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Grazie mille andbin
![]() Sempre molto preziosi i tuoi consigli. Consultero la man page. Ciao. ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Una domanda però.
Io ho scritto: Codice:
ret=glob(args[i],GLOB_DOOFS | GLOB_NOSORT | GLOB_ERR, NULL, &pglob); ![]() |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Prima di chiamare la glob() bisogna settare il campo gl_offs della struttura indicando quanti 'slot' lasciare liberi. È spiegato chiaramente nella pagina di man. ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ah ecco infatti io avevo settato quella variabile a 2 e giustamente lui ha lasciato vuoti i primi due campi. Ora è tutto chiaro. Grazie.
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:51.