问题描述
我在我的小 C 应用程序中使用 glob(3)
进行通配。
以 /
结尾的通配符模式应该匹配目录(仅)。
不幸的是,它似乎也匹配任何符号链接(无论它们是指向目录、文件还是根本不指向)。
这是一个小示例程序:
#include <stdio.h>
#include <glob.h>
int main(int argc,char**argv) {
int flags = GLOB_MARK;
for(int i=1; i<argc; i++) {
const char*pattern=argv[i];
glob_t gg;
printf("globbing: '%s'\n",pattern);
if(!glob(pattern,flags,NULL,&gg)) {
for(int j=0; j<gg.gl_pathc; j++) {
printf(" %s\n",gg.gl_pathv[j]);
}
}
}
return 0;
}
这是我的测试数据:
$ ls -l tests/
total 4
drwxr-xr-x 2 user user 4096 Apr 28 10:10 dir
-rw-r--r-- 1 user user 0 Apr 28 10:10 file
lrwxrwxrwx 1 user user 3 Apr 28 10:10 symlink.dir -> dir
lrwxrwxrwx 1 user user 4 Apr 28 10:10 symlink.file -> file
lrwxrwxrwx 1 user user 7 Apr 28 10:10 symlink.Nowhere -> Nowhere
现在,当我用 tests/*/
通配符时,我本来希望看到 tests/dir/
和 tests/symlink.dir/
,但我得到的(在 Debian 上)是这样的:
$ ./glob 'tests/*/'
globbing: 'tests/*/'
tests/dir/
tests/symlink.dir/
tests/symlink.file
tests/symlink.Nowhere
在 macOS 上,我得到了一些稍微不同的东西(只有指向现有条目的符号链接),这看起来也很奇怪(所有结果都标记为带有尾随 /
的目录,包括指向非目录文件的符号链接):
$ ./glob 'tests/*/'
globbing: 'tests/*/'
tests/dir/
tests/symlink.dir/
tests/symlink.file/
那么:为什么像 tests/*/
这样的模式会返回 not-only 目录?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)