首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用fseek()获取硬盘大小

用fseek()获取硬盘大小
EN

Stack Overflow用户
提问于 2013-12-05 05:32:58
回答 1查看 157关注 0票数 0

我一直在尝试使用using ()来获取linux系统上的硬盘大小。

我有一个函数,它应该返回正确的大小:

代码语言:javascript
复制
unsigned long long getsize(FILE *fp){
    unsigned long long prev=ftell(fp);
    fseek(fp,0,SEEK_END);
    unsigned long long size=ftell(fp);
    fseek(fp,prev,SEEK_SET);
    return size;
}

但是当我在硬盘上使用它时,它会返回18446744073709551615或2^64-1.

它似乎并不总是把它还回去。因为我可以把它用在文件上。我以前也在硬盘上工作过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-05 05:56:15

你会得到这样的结果,因为这不是获得磁盘大小的正确方法。

如果您想检查磁盘的大小,应该在磁盘fd上发出一个ioctl(),请求为BLKGETSIZE64 (以及指针指向long long的参数)。

代码语言:javascript
复制
long long disk_size;
ioctl(<disk_fd>, BLKGETSIZE64, &disk_size);

如果您对文件系统的大小(可能不同)或文件系统上的空空间很感兴趣,那么使用statvfs()调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20392227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档