#pragma once
template <class T>
class single_instance {
public:
static inline T instance() {
static T obj;
return obj;
}
private:
single_instance() = default;
virtual ~single_instance() = default;
};
#pragma once
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include "single_instance.hpp"
class file_utility {
public:
void get_cpu_model(std::string &model) {
const char *shell_cmd = "cat /proc/cpuinfo | grep \"model name\" | cut -d ':' -f 2";
FILE *fp = popen(shell_cmd, "r");
if (!fp) {
return;
}
char buf[128] = "";
fgets(buf, sizeof(buf), fp);
if (' ' == buf[0]) {
model.assign(buf + 1, strlen(buf));
}
else {
model = buf;
}
fclose(fp);
}
};
#define G_FILE_UTILITY single_instance<file_utility>::instance()
#include "file_utility.hpp"
#include <iostream>
int main() {
std::string cpu_model;
G_FILE_UTILITY.get_cpu_model(cpu_model);
std::cout << cpu_model << std::endl;
return 0;
}