2013-04-22 91 views
-1

我必须做ls -l函数。我的问题是从ls -l中找到总值。这是我如何做到的。C,总共来自unix ls函数

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

我相信,我的解决方案是正确的定义,那就是: “对于每个列出的目录,前言中的文件与线 `总块”,其中模块是所有的总磁盘分配 该目录中的文件,块大小目前默认为1024 字节“(info ls)但我的功能与真正的ls不同。

例如:

>ls -l 
>total 60 

...并在同一目录下:

>./ls -l 
>total 8 

如果我写:

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

目录大小!=它里面的文件大小!您必须通过目录,获取所有文件的统计数据并总结其大小。 – 2013-04-22 16:51:58

+0

谢谢,好像我的文件系统的概念是完全错误的。 – mzdravkov 2013-04-22 16:54:45

回答

0

我固定它:

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 +文件名新的字符数组,然后我得到的统计结构,用它来查找总。

0

您应该使用执行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); 
} 
+0

您的答案缺少计算总文件大小,我相信这是问题所在。 – hyde 2013-08-27 14:18:27