используя ifstream :: open "meminfo", fileLen равен -1 - PullRequest
0 голосов
/ 16 декабря 2011

Ниже приведен код:

#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, программа верна. наконец спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Содержимое /proc не является реальными файлами и, следовательно, не имеет реальных размеров. Не пытайтесь определить их размеры, а просто прочитайте и проанализируйте их как обычно.

1 голос
/ 16 декабря 2011

Поскольку это не обычный файл:

Файловая система proc - это псевдофайловая система с корнем в / proc, которая содержит доступные для пользователя объекты, относящиеся к состоянию ядра ирасширение, выполняющие процессы, которые выполняются поверх него.«Псевдо» используется, потому что файловая система proc существует только как отражение отображаемых структур данных ядра в памяти.Вот почему большинство файлов и каталогов в / proc имеют размер 0 байт.

0 голосов
/ 16 декабря 2011

Я думаю, что причина может быть /proc/meminfo на самом деле не в файле./proc не содержит реальных файлов, это просто снимок текущего состояния системы.

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

...