统计不承认直接

时间:2016-11-17 22:41:11

标签: c file stat

你好我正在研究一种只计算常规文件大小的du实现,到目前为止我得到了这个:

 childAnswer* list(char* path){
    DIR *directory;
    struct dirent *filei;
    struct stat stats;
    directory = opendir(path);
    int size = 0;
    dQhead* q = createDQ();
    if (directory != NULL)  
    {
        while ((filei=readdir(directory))!=NULL){
            stat(filei->d_name, &stats);  
            //printf("SIZE : %d\n",  size);
            char *buf = malloc(strlen(path)+strlen(filei->d_name)+2);
            strcpy(buf,path);
            strcat(buf,"/");
            strcat(buf,filei->d_name);
            if (S_ISDIR(stats.st_mode)) {
                stat(buf, &stats);
                if (S_ISDIR(stats.st_mode)) {
                    if (strcmp(filei->d_name,".")!=0 && (strcmp(filei->d_name,"..")!=0)) {
                        addToQ(q,createD(buf));
                        printf(" Directory : %s\n",buf);

                    }
                }  
            }
            else{
                printf(" Non directory : %s\n",buf);
                size = size + stats.st_blocks;
            }

            free(buf);
        }
        printf(" path : %s\n",  path);
        printf("Return :\n");
        printQ(q);
        printf("Finish returning \n");
        childAnswer* answer = createCA(path, size, q);

        closedir(directory);
        return answer;
    }
    else {
        perror(NULL);    
    }
    return NULL;
}

问题是它无法识别某些目录文件,因此它不会那么深,我的意思是,如果id无法识别目录,它将不会使用会添加到addToQ()的{​​{1}}函数list函数的目录队列,用于下一次迭代。 我这样编码的原因是因为我必须使用线程来实现它,所以每个线程都会使用不同的目录来运行这个函数。

任何帮助都将不胜感激。

提前致谢。

0 个答案:

没有答案