Tôi vừa viết hàm C++ sau để lập trình xác định số lượng RAM mà hệ thống đã cài đặt. Nó hoạt động, nhưng có vẻ như với tôi rằng nên có một cách đơn giản hơn để làm điều này. Ai đó có thể cho tôi biết nếu tôi đang thiếu thứ gì đó?Làm thế nào để bạn xác định số lượng RAM hệ thống Linux trong C++?
getRAM()
{
FILE* stream = popen("head -n1 /proc/meminfo", "r");
std::ostringstream output;
int bufsize = 128;
while(!feof(stream) && !ferror(stream))
{
char buf[bufsize];
int bytesRead = fread(buf, 1, bufsize, stream);
output.write(buf, bytesRead);
}
std::string result = output.str();
std::string label, ram;
std::istringstream iss(result);
iss >> label;
iss >> ram;
return ram;
}
Trước tiên, tôi đang sử dụng popen("head -n1 /proc/meminfo")
để nhận dòng đầu tiên của tệp tin từ hệ thống. Kết quả của lệnh đó trông giống như
MemTotal: 775.280 kB
Một khi tôi đã có đầu ra rằng trong một istringstream
, thật đơn giản để tokenize nó để có được thông tin mà tôi muốn. Câu hỏi của tôi là, có một cách đơn giản hơn để đọc trong đầu ra của lệnh này? Có một cuộc gọi thư viện C++ chuẩn để đọc số lượng RAM hệ thống không?
sysinfo hoạt động hoàn hảo. Cảm ơn bạn. –
bạn có thể muốn đóng trình xử lý tệp sau khi đọc – segfault
Chắc chắn các trình phá hủy đã làm điều đó rồi. –