S_ISREG没有处理列表功能

时间:2017-01-31 22:48:30

标签: c stat

我在计算目录中的常规文件时遇到了一些麻烦。

这是我的代码:

int show_regular_files(char ** path) {
    DIR * dp = opendir(*path); // open the path                                                              
    char d_path[BUFSIZE]; //                                                                               
    struct dirent *ep;
    struct stat sb;
    int number=0;
    int rv;
    if (dp != NULL){
        while (ep = readdir (dp)){
            sprintf(d_path,"%s/%s ",*path,ep->d_name);
            rv= stat(d_path, &sb);
            if(rv<0)
            continue;
            else{
                if((sb.st_mode & S_IFMT)==S_IFREG){ // checks if a file is regular or not
                    if(sb.st_mode & S_IXOTH || sb.st_mode & S_IXGRP){// search permission  & group owner of the file
                        number++;
                    }
                }
            }
        }
    }
    else
        perror("can't open the file ");
            closedir(dp); // finally close the directory                                                                                                                                                                           
    return number;
}

除非我删除REGULARFILE条件检查和stat行,否则它总是打印0,然后列出目录中的所有文件。

1 个答案:

答案 0 :(得分:1)

我认为问题出在这一行:

sprintf(d_path,"%s/%s ",*path,ep->d_name);
                     ^

最后你有一个额外的空格,导致stat()调用失败。你需要删除那个空间。

顺便说一句,避免sprintf()。请改用snprintf()