首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ifstream::open "meminfo",fileLen为-1

使用ifstream::open "meminfo",fileLen为-1
EN

Stack Overflow用户
提问于 2011-12-16 15:37:59
回答 3查看 949关注 0票数 0

代码如下:

代码语言:javascript
复制
#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <fstream>
#include <memory.h>


int main()
{
std::ifstream file;
file.open("/proc/meminfo");
if(file.fail())
    return 0;

file.seekg(0, std::ios::end);
int fileLen = file.tellg();
file.seekg(0, std::ios::beg);

char buffer[fileLen + 1];
memset(buffer, 0, fileLen + 1);
file.read(buffer, fileLen + 1);
if(file.fail())
    return 0;

unsigned long long total = 0;
unsigned long long free = 0;
sscanf(buffer, "%*s %llu%*s%llu", &total, &free);
file.close();
return 1;
}

在代码中,fileLen是-1,但我不知道原因。如果ifstream打开一个不同的文件,如1.txt,则程序是正确的。最后,感谢您的帮助

EN

回答 3

Stack Overflow用户

发布于 2011-12-16 15:42:37

/proc的内容不是真正的文件,因此没有实际大小。不要试图获取它们的大小,而是简单地正常读取和解析它们。

票数 2
EN

Stack Overflow用户

发布于 2011-12-16 15:46:14

因为这不是一个普通的文件:

proc文件系统是一个以/proc为根的伪文件系统,其中包含用户可访问的对象,这些对象与内核的运行时状态有关,扩展后,还与运行在内核之上的正在执行的进程有关。使用“伪”是因为proc文件系统仅作为它所显示的内存中内核数据结构的反映而存在。这就是为什么/proc中的大多数文件和目录都是0字节大小。

票数 1
EN

Stack Overflow用户

发布于 2011-12-16 15:49:52

我认为原因可能是/proc/meminfo实际上不是一个文件。/proc并不包含真实的文件,它们只是系统当前状态的快照。

http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

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

https://stackoverflow.com/questions/8531170

复制
相关文章

相似问题

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