Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用ifstream::open";meminfo“;,fileLen是-1_C++_Linux_Ifstream - Fatal编程技术网

C++ 使用ifstream::open";meminfo“;,fileLen是-1

C++ 使用ifstream::open";meminfo“;,fileLen是-1,c++,linux,ifstream,C++,Linux,Ifstream,代码如下: #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

代码如下:

#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;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
std::ifstream文件;
打开(“/proc/meminfo”);
if(file.fail())
返回0;
seekg(0,std::ios::end);
int fileLen=file.tellg();
seekg(0,std::ios::beg);
字符缓冲区[fileLen+1];
memset(缓冲区,0,fileLen+1);
读取(缓冲区,fileLen+1);
if(file.fail())
返回0;
无符号长总计=0;
无符号长自由=0;
sscanf(缓冲区,%*s%llu%*s%llu“,&total,&free);
file.close();
返回1;
}
在代码中,
fileLen
是-1,但我不知道原因。如果
ifstream
打开不同的文件,如
1.txt
,则程序是正确的。
最后,感谢您的帮助

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

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

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

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


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

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


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


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


是的,我应该对linux有更好的了解,非常感谢。是的,我应该对linux有更好的了解,非常感谢。