Мне нужно написать программу на языке c, чтобы не использовал функцию system (). Одна из особенностей заключается в том, что мы должны иметь возможность использовать подстановочные знаки. Кажется, я не могу найти хороший пример того, как использовать функции glob или fnmatch, с которыми я сталкивался, поэтому я возился и пока у меня есть кое-какая работающая функция блога (в зависимости от того, как я организовал свой код).
Если у меня есть переменная glob, объявленная как глобальная, то функция частично работает. Однако любая команда впоследствии выдает ошибку. Пример:
ls *.c
produce correct results
ls -l //no glob required
null passed through
поэтому я попытался сделать его локальной переменной. Это мой код прямо сейчас:
int runCommand(commandStruct * command1) {
if(!globbing)
execvp(command1->cmd_path, command1->argv);
else{
glob_t globbuf;
printf("globChar: %s\n", globChar);
glob(globChar, GLOB_DOOFFS, NULL, &globbuf);
//printf("globbuf.gl_pathv[0]: %s\n", &globbuf.gl_pathv[0]);
execvp(command1->cmd_path, &globbuf.gl_pathv[0]);
//globfree(&globbuf);
globbing = 0;
}
return 1;
}
Когда вы делаете это с globbuf как локальным, он выдает null для globbuf.gl_path [0]. Не могу понять почему. Любой, кто знает, как работает глобус, знает, что может быть причиной? При необходимости может опубликовать больше кода, но именно в этом проблема.