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]);
}
}
}
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]);
}
}
}