PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : glob Beispiel?



403
13-03-2007, 22:03
Hallo :)

Ich versuche grade globbing zu verstehen. Dazu habe ich mir das Beispiel aus der (BSD) manpage
herausgesucht. (ist fast identisch zum Linux Beispiel ;) Erstmal habe ich die statischen Strings
rausgeschmissen. Mein 'Programm' kann jetzt also ./a.out *.[Dateiendung] und gibt dann diese Dateien mit ls aus.

Da ich dazu das 'Programm' nicht brauche, habe ich mal nach weiteren Moeglichkeiten gesucht,
z.B. alle Parameter von argv[] ausgeben.

Leider hapert es grade argv[] dynamisch auszulesen. :rolleyes: Das Problem ist, das
es kompiliert. Kann mir jemand helfen? Weitere Aufgaben zu globbing waeren auch toll. ;)



#include <stdio.h>
#include <stdlib.h>
#include <glob.h>

/*
simple ls globbing, adapted example from 'man 3 glob'
*/

#define WANT argv[1]
#define EXEC "/usr/local/bin/vim"

glob_t g;

int debug=0;
int i=1;
char j;

int main(int argc, char *argv[]) {

if(!argv[1] || argc >3) { /* argc = *.c, *.h */
printf("usage: \a %8s 'pattern'\n",argv[0]);
exit(1);
}

g.gl_offs = 2;
/*
glob("*.c", GLOB_DOOFFS, NULL, &g); static examples
glob("*.h", GLOB_DOOFFS | GLOB_APPEND, NULL, &g);
*/

if (debug) {
sleep (1);
printf("\nargv: %s ", argv[1]);
printf("\nargc: %i ", argc);
printf("\nWANT: %s ", WANT);
}

if (glob(WANT, GLOB_DOOFFS | GLOB_APPEND, NULL, &g)) {
printf ("\nno match.\n\a");
} else {
for (i--, j-- ; i > argc; i !=0, j>argv, j != NULL) {
g.gl_pathv[i] = argv[j];
/* XXX */
execvp( EXEC, g.gl_pathv[i]);
}
}
}

anda_skoa
14-03-2007, 16:44
Wenn du
./a.out *.extension
machst, wertet bereits die Shell den Wildcard aus.

In deinem Beispielcode sieht die for() Schleife ziemlich suspekt aus, da wird i in der Abbruchsbedingung benutzt, aber in der Schleife nicht geändert.
Außerdem ist ihr Startwert (0, weil auf 1 initialisiert und dann dekrementiert) sicher nie größer als argc, weil argc immer mindestens 1 ist.

Ciao,
_

403
14-03-2007, 18:57
Hallo,

Vielen Dank fuer deine Antwort. Das die Shell globt ist mir bekannt. Deswegen suche ich auch nach weiteren Anwendungsfaellen.

Zu for: Das ist einfach nur abgef*ckt. :rolleyes: Ich sehe mal dass ich das bei Zeiten ;) korrigiert bekomme.