从dirent struct打印off_t文件大小

我想要的是打印我正在使用的字节大小的文件

DIR *d; struct dirent *dir; d= opendir(absolute_path); while((dir= readdir(d))!=NULL){ printf("%s\t %d\t %u\n",dir->d_name,dir->d_type,(int long long )dir->d_off); } 

打印类型为off_t的d_off是错误的。 对于323,388 bytes的文件,它打印1296623584

我认为铸造是问题所在。 我尝试了很多铸件,比如%d%s%u%llu ……什么是合适的铸件?

编辑:用于查找filesize的正确函数是使用stat结构的lstat()

正如@Andrey指出的那样,d_off的值并不总是有用甚至不存在。 例如,OSX没有它。 请改用stat来调用。

readdir手册页:

POSIX.1-2001中仅指定了字段d_name和d_ino。 其余字段可用于许多系统,但不是所有系统。 在glibc下,程序可以通过测试是否定义了宏_DIRENT_HAVE_D_NAMLEN,_DIRENT_HAVE_D_RECLEN,_DIRENT_HAVE_D_OFF或_DIRENT_HAVE_D_TYPE来检查POSIX.1中未定义的字段的可用性。

d_off中返回的值与通过在目录流中的当前位置调用telldir(3)返回的值相同。 请注意,尽管它的类型和名称,d_off字段很少在现代文件系统上的任何类型的目录偏移量。 应用程序应将此字段视为不透明值,不对其内容进行任何假设; 另见telldir(3)。

要查找文件的大小,请参阅如何确定C中文件的大小?