背景
c++ qt需要获取一系列日志的大小,不想和底层C接口打交道,同时想看看QT的实现,是如何完成的?
源码查看
首先通过qtcreator的帮助知道,QFile::size()是基类QFileDevice::size()实现,
然后找到Qt5.9.7的源码,qtbase\include\QtCore\qfiledevice.h, 索引到src/corelib/io/qfiledevice.h
然后到达src/corelib/io目录,搜索关键字::size(), 可以看到QFileDevice::size(),-> QFSFileEngine::size() -> QFSFileEnginePrivate::nativeSize() -> QFSFileEnginePrivate::doStat(QFileSystemMetaData::SizeAttribute) -> QFileSystemEngine::fillMetaData ->QT_STAT(nativeFilePath, &statBuffer)
->QStorageInfoPrivate::doStat() ->QStorageInfoPrivate::retrievePosixInfo()->EINTR_LOOP(result, QT_STATFS(QFile::encodeName(rootPath).constData(), &statfs_buf))->QT_STATFS -> define QT_STATFS ::statvfs
结论
使用QStorageInfo::bytesTotal,而不是QFile::size,因为QStorageInfo是statsfs,QFile可能是ftell(应该不是,但是QFile更绕)
标签:QT,STATFS,QFile,源码,io,Qt,Size,size From: https://www.cnblogs.com/dayoushen/p/17490831.html