initial commit

This commit is contained in:
chatlanin 2023-04-19 21:04:10 +03:00
commit cf2b28beca
6 changed files with 119 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
build
.cache

59
bin/main.cpp Normal file
View File

@ -0,0 +1,59 @@
#include <iostream>
#include <sys/statvfs.h>
#include <mntent.h>
#include <cstdio>
#include <fstream>
template <typename T>
void print_in_color(const T& text, const std::string& color)
{
std::cout << "\033[" << color << "m" << text << "\033[0m";
}
template <typename T>
std::string get_size_string(const T& size) {
if (size < 1024) {
return std::to_string(size) + " B";
} else if (size < 1024 * 1024) {
return std::to_string(size / 1024) + " KB";
} else if (size < 1024 * 1024 * 1024) {
return std::to_string(size / 1024 / 1024) + " MB";
} else {
return std::to_string(size / 1024 / 1024 / 1024) + " GB";
}
}
auto main() -> int
{
std::ifstream fs("/etc/mtab");
std::FILE* file = std::fopen("/etc/fstab", "r");
struct mntent* mount_entry = nullptr;
std::cout << "\n\n";
while ((mount_entry = getmntent(file)))
{
struct statvfs stat;
if (statvfs(mount_entry->mnt_dir, &stat) != 0) {
std::cerr << "Ошибка при получении информации о файловой системе: " << mount_entry->mnt_dir << "\n";
continue;
}
unsigned long long total_size = (unsigned long long) stat.f_frsize * stat.f_blocks;
unsigned long long free_size = (unsigned long long) stat.f_frsize * stat.f_bfree;
unsigned long long used_size = total_size - free_size;
std::cout << "Точка монтирования: " << mount_entry->mnt_dir << "\n";
std::cout << "Тип файловой системы: " << mount_entry->mnt_type << "\n";
std::cout << "Общий объем: ";
print_in_color(get_size_string(total_size), "0;33");
std::cout << "\nСвободное место: ";
print_in_color(get_size_string(free_size), "0;32");
std::cout << "\nИспользовано: ";
print_in_color(get_size_string(used_size), "0;35");
std::cout << "\n\n";
}
std::fclose(file);
fs.close();
}

6
bin/meson.build Normal file
View File

@ -0,0 +1,6 @@
executable(
'disk-info',
'main.cpp',
dependencies : deps,
cpp_args: args
)

37
meson.build Normal file
View File

@ -0,0 +1,37 @@
project(
'disk-info',
'cpp',
version : run_command('jq', '-r', '.version', join_paths(meson.source_root(), 'props.json'), check: true).stdout().strip(),
default_options : [
'warning_level=1',
'optimization=3',
'default_library=static',
'cpp_std=c++20',
])
add_project_arguments (
'-Wpedantic',
'-Wno-shadow',
'-Wno-unused-but-set-variable',
'-Wno-comment',
'-Wno-unused-parameter',
'-Wno-unused-value',
'-Wno-missing-field-initializers',
'-Wno-narrowing',
'-Wno-deprecated-enum-enum-conversion',
'-Wno-volatile',
'-Wno-deprecated-declarations',
language: 'cpp'
)
#############################################################
args = []
deps = []
inc = []
#############################################################
#subdir('src')
subdir('bin')
#subdir('tests')

2
props.json Normal file
View File

@ -0,0 +1,2 @@
{"version": "0.1.0"}

13
run Executable file
View File

@ -0,0 +1,13 @@
#!/bin/zsh
PROJECT_NAME="disk-info"
command meson compile -C build
if [[ -z "$1" ]]; then
cd build
./bin/$PROJECT_NAME
cd ..
else
meson test $1 -C build
fi