你好我正在研究一种只计算常规文件大小的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
函数的目录队列,用于下一次迭代。
我这样编码的原因是因为我必须使用线程来实现它,所以每个线程都会使用不同的目录来运行这个函数。
任何帮助都将不胜感激。
提前致谢。