Ich möchte die Größe der Verzeichnisse, aber für jedes Verzeichnis das Programm druckt "4096". Wie kann ich die tatsächliche Größe drucken?Falsche Größe beim Drucken Verzeichnisse Dimension (st_size)
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int argc,char* argv[]){
int i,p[2];
pipe(p);
struct stat buf;
for(i=1; i<argc; i++){
printf("%s\n",argv[i]);
stat(argv[i],&buf);
if(S_ISDIR(buf.st_mode)){
printf("%s is a directory\n",argv[i]);
printf("%zu", buf.st_size);
}
}
return 0;
}
Ich versuchte printf("%llu", (unsigned long long)buf.st_zise)
, printf("%lu",(long unsigned)buf.st_size)
aber die Ergebnisse sind die gleichen.
Eine schnelle Suche nach 'off_t', die Art der' st_size', sagt „off_t soll Ganzzahlige Typen mit Vorzeichen ". Probieren Sie stattdessen einen signierten Modifikator in 'printf'. – Evert
Oder einfach mit * Warnungen auf * kompilieren: 'gcc -Wall whatever.c' gibt" Warnung: Format gibt den Typ 'size_t' (aka 'unsigned long') aber das Argument hat den Typ 'off_t' (aka 'long long') [-W Format] ". – Evert
Da 'ls' auch' 4096' als Größe von Verzeichnissen ausgibt, würde ich sagen, dass es wie vorgesehen funktioniert. – EOF