From a7ec673c10ce0a1c651d5fbc0aa3144c4b6b4086 Mon Sep 17 00:00:00 2001 From: chatlanin Date: Wed, 19 Apr 2023 21:18:15 +0300 Subject: [PATCH] add error exception --- bin/main.cpp | 60 +++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/bin/main.cpp b/bin/main.cpp index 374900f..89fd476 100644 --- a/bin/main.cpp +++ b/bin/main.cpp @@ -33,34 +33,42 @@ std::string get_size_string(const T& size) 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))) + try { - struct statvfs stat; - if (statvfs(mount_entry->mnt_dir, &stat) != 0) { - std::cerr << "Ошибка при получении информации о файловой системе: " << mount_entry->mnt_dir << "\n"; - continue; + std::FILE* file = std::fopen("/etc/fstab", "r"); + if (file == nullptr) + throw std::runtime_error("File not found"); + + 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"; } - 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); + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return 1; } - - std::fclose(file); - fs.close(); }