我必须写在C外壳程序,不使用system()函数。其中一个特点是我们必须能够使用通配符。我似乎无法找到一个很好的例子,说明如何使用glob或这个我一直在使用的fnmatch函数,所以我一直在搞乱,到目前为止我有一些工作博客功能(取决于我如何安排我的码)。自定义外壳水珠问题
如果我有声明为一个全局变量水珠则该功能部分工作。但是之后的任何命令都会产生错误。例如:
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作为本地这样做,它产生了globbuf.gl_path空[0]。似乎无法弄清楚为什么。任何人都知道全局作品知道可能是什么原因?如果需要,可以发布更多的代码,但这是问题所在。
根据手册页,'glob()'已经确保发送带有空指针的缓冲区。 – Ariel