ОСлаб1_Мячина_БФИ2203
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
(МТУСИ)
Кафедра «Системное программирование»
Лабораторная работа №1
«Функции получения системной информации»
по дисциплине «Операционные системы»
Выполнила:
студентка группы БФИ2203
Мячина Лада Андреевна
Проверила:
Старший преподаватель
Алексанян Диана Ашотовна
Москва, 2024 г.
Цель работы: получение практических навыков получения системной информации с помощью функций API в Linux.
Задание:
Разработать приложение, обеспечивающее получение следующей системной информации:
• Имя компьютера, имя пользователя;
• Версия операционной системы;
• Системные метрики (не менее 3-х);
• Функции для работы со временем (не менее 2-х);
• Дополнительные API-функции: 4 функции по выбору.
Ход работы:
Написала программу для выполнения задания:
Листинг 1. Код программы
#include <unistd.h>
#include <sys/utsname.h>
#include <sys/sysinfo.h>
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <iomanip>
int main() {
// Получение имени компьютера
struct utsname buffer;
if (uname(&buffer) == 0) {
std::cout << "Computer name: " << buffer.nodename << std::endl;
}
// Получение имени пользователя
const char* userName = getlogin();
if (userName != nullptr) {
std::cout << "User name: " << userName << std::endl;
}
// Получение версии операционной системы
std::cout << "Version OS: " << buffer.sysname << " " << buffer.release << std::endl;
// Системные метрики
struct sysinfo sysInfo;
if (sysinfo(&sysInfo) == 0) {
std::cout << "Total amount of ram: " << sysInfo.totalram / (1024 * 1024) << " MB" << std::endl;
std::cout << "Free ram: " << sysInfo.freeram / (1024 * 1024) << " MB" << std::endl;
double loadavg[1];
if (getloadavg(loadavg, 1) != -1){
std::cout << "Average CPU usage in the last 5 minutes: " << loadavg[0] << std::endl;
}
// Функции для работы со временем
time_t currentTime = time(nullptr);
std::cout << "Current date and time: " << ctime(¤tTime);
// Форматирование времени
std::tm* localTime = std::localtime(¤tTime);
std::cout << "Formated date and time: "
<< std::put_time(localTime, "%d-%m-%Y %H:%M:%S") << std::endl;
// Дополнительные API-функции
long numProcessors = sysconf(_SC_NPROCESSORS_ONLN);
std::cout << "Number of available processors: " << numProcessors << std::endl;
pid_t processId = getpid();
std::cout << "ID current process: " << processId << std::endl;
if (getcwd(cwd, sizeof(cwd)) != nullptr) {
std::cout << "Current working directory: " << cwd << std::endl;
}
time_t lastRebootTime = currentTime – sysInfo.uptime;
std::cout << "The time of the last reboot: " << ctime(&lastRebootTime) << std::endl;
return 0;
}
Код выводит:
- Имя компьютера;
- Имя пользователя;
- Версия операционной системы;
Системные метрики:
- Общее количество памяти в MB;
- Свободную память в MB;
- Информацию о средней загрузке процессора за последние 5 минут;
Функции для работы со временем:
- Текущую дату и время;
- Форматированную дату и время;
Дополнительные API-функции:
- Количество процессоров;
- ID текущего процесса;
- Текущий рабочий каталог;
- Время последней перезагрузки системы.
Результат работы программы представлен на рисунке 1.
Рисунок 1 – Результат работы программы
Вывод: Разработано приложение, обеспечивающее получение системной информации с помощью функций API в Linux.
