stat()在c中给出错误的目录大小

Sre*_*ree 3 c struct message stat reply

我需要使用stat()找到命令行中给出的文件或目录的大小.它适用于文件(相对路径和绝对路径),但是当我给出一个目录时,它总是返回512或1024的大小.

如果我打印目录中的文件,它如下所示:

 Name : .
 Name : ..
 Name : new
 Name : new.c
Run Code Online (Sandbox Code Playgroud)

但实际上只有new和new.c文件存在.为此,即使我在目录中放置了更多文件,大小也会返回512.这是我的代码片段:

if (stat(request.data,&st)>=0){
        request.msgType = (short)0xfe21;
        printf("\n Size : %ld\n",st.st_size);
        sprintf(reply.data,"%ld",st.st_size);
        reply.dataLen = strlen(reply.data);
    }
    else{
        perror("\n Stat()");
    }
}
Run Code Online (Sandbox Code Playgroud)

我哪里做错了???

这是我的要求,回复结构:

 struct message{
        unsigned short msgType;
        unsigned int offset;
        unsigned int serverDelay;
        unsigned int dataLen;
        char data[100];
    };
struct message request,reply;
Run Code Online (Sandbox Code Playgroud)

我在unix os中的gcc编译器中运行它.

Joh*_*ter 7

stat()在目录上不返回其中的文件大小的总和.size字段表示目录条目占用的空间,它取决于几个因素.如果您想知道特定目录下的所有文件占用了多少空间,则必须递归树,累加所有文件占用的空间.这就是工具的du工作方式.