0

我必须使 ls -l 功能。我的问题是从 ls -l 中找到总值。这是我的做法。

if (l_option) {
  struct stat s;
  stat(dir_name, &s);
  printf("total %jd\n", (intmax_t)s.st_size/512);
}

我相信我的解决方案根据定义是正确的,即:“对于列出的每个目录,在文件前面加上一行‘total BLOCKS’,其中 BLOCKS 是该目录中所有文件的总磁盘分配。当前的块大小默认为 1024 字节”(信息 ls)但我的功能与真正的 ls 不同。

例如:

>ls -l
>total 60

...并在同一目录中:

>./ls -l
>total 8

如果我写:

>stat .
>File: `.'
>Size: 4096         Blocks: 8          IO Block: 4096   directory
>...
4

2 回答 2

1

我修好了它:

n = scandir(path, &namelist, filter, alphasort);

if (l_option) { // flag if -l is given
  while (i < n) {
    char* temp = (char *) malloc(sizeof(path)+sizeof(namelist[i]->d_name));
    strcpy(temp, path); //copy path to temp
    stat(strcat(temp, namelist[i]->d_name), &s); // we pass path to + name of file
    total += s.st_blocks;
    free(temp);
    free(namelist[i++]); // optimization rules!
  }
  free(namelist);
  printf("total %d\n", total/2);
}

所以基本上,我创建了包含 dir_name + 文件名的新 char 数组,然后我得到 stat 结构并使用它来查找总数。

于 2013-04-22T18:42:49.013 回答
-1

您应该使用 opendir/readdir/closedir。

#include <dirent.h> 
#include <stdio.h> 

int main(void)
{
  DIR           *d;
  struct dirent *dir;
  d = opendir(".");
  if (d)
  {
    while ((dir = readdir(d)) != NULL)
    {
      count++;
    }

    closedir(d);
  }
  printf("total %jd\n",count);
  return(0);
}
于 2013-04-22T16:58:40.963 回答