这是从编译好的代码。它在一个目录中打印文件名,前面有一个字母选项:d
,f
,l
或o
,具体取决于文件类型(其他o
)。但是,我在目录/etc/network
上测试了它,该目录有一个名为run
的符号文件,它显示为d
?我也尝试重新安排if-statements
的顺序,但这也给出了令人不满意的输出。我使用不正确吗?
while ((ent = readdir (dp)) != NULL) {
lstat(ent->d_name, &st);
if (col){
if(S_ISDIR(st.st_mode)){
printf("d\t");
}
else if (S_ISREG(st.st_mode)){
printf("f\t");
}
else if (S_ISLNK(st.st_mode)){
printf("l\t");
}
else {
printf("o\t");
}
}
答案 0 :(得分:4)
在此行中:lstat(ent->d_name, &st);
,dp->d_name
仅包含文件名,您需要将文件的完整路径传递给lstat()
,如下所示:
char full_path[512] = "DIR_PATH"; //make sure there is enough space to hold the path.
strcat(full_path, ent->d_name);
int col = lstat(full_path, &st);
BTW,S_ISDIR
,S_ISLNK
等是POSIX宏,而不是函数。
答案 1 :(得分:2)
这可能是另一种解决方案:
if(col){
if(ent->d_type == DT_DIR)
printf("d ");
else if(ent->d_type == DT_LNK)
printf("l ");
else if(ent->d_type == DT_REG)
printf("f ");
}