Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОСлаб1_Мячина_БФИ2203

.docx
Скачиваний:
0
Добавлен:
02.08.2026
Размер:
112 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

Московский технический университет связи и информатики

(МТУСИ)

Кафедра «Системное программирование»

Лабораторная работа №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.