Курило БСТ2001 ОС лаба 2
.docxМинистерство цифрового развития и массовых коммуникаций
Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное
бюджетное образовательное учреждение
высшего образования
«Московский технический университет связи и информатики»
(МТУСИ)
Кафедра
«Системного программирования»
Отчет по лабораторной работе №2
по дисциплине
«Операционные системы»
Выполнила студентка:
группы БСТ2001
Курило А. А.
Проверила:
ассистентка Алексанян Д. А.
Москва – 2022г.
Цель работы:
Целью работы можно обозначить получение практических навыков по программированию в Linux.
Задание:
Требуется разработать приложение, обеспечивающее получение следующей системной информации:
1. Имя компьютера, имя пользователя;
2. Версия операционной системы;
3. Системные метрики (не менее 3х);
4. Функции для работы со временем (не менее 2х);
5. Дополнительные API-функции: 4 функции по выбору.
Примечание: для получения системной информации для последнего пункта задания можно воспользоваться как функциями, определенными в системных библиотеках, так, например, считать данные из системных файлов, размещенных в /sys/ либо других директориях.
Ход выполнения лабораторной работы:
Для начала, командой sudo apt install gcc, нужно было скачать и установить на рабочую станцию компилятор языка c++. После чего создать файл, в котором будет находится весь код, у меня это Code.cpp – рисунок 1. Расширение “cpp” означает, что мы будем использовать код на языке C++.
Рисунок 1 – создание файла обыкновенного
Для дальнейшей работы был создан шаблон, со всеми необходимыми библиотеками и телом основного метода – рисунок 2. Весь последующий код будет находится в методе main().
Рисунок 2 – основа программы C++
В первом задании работы требовалось вывести имя компьютера и имя пользователя. Решение первого задания представлено на рисунке 3.
Рисунок 3 – решение первого задания
Для компиляции файла необходимо было прописать в терминале “g++ Code.cpp”, после чего для его запуска команду “./a.out”. Результат на рисунке 4.
Рисунок 4 – результат работы кода
Второе задание заключалось в выводе версии операционной системы. Код представлен на рисунке 5, а результат на рисунке 6.
Рисунок 5 – код второго задания
Рисунок 6 – результат работы кода второго задания
Третье задание требовало вывести системные метрики в количестве не менее 3-х штук. Код на рисунке 7, результат на рисунке 8.
Рисунок 7 – код третьего задания
Рисунок 8 – результат работы кода третьего задания
Четвёртое задание заключалось в использовании функция, предназначенных для работы со временем.
Рисунок 9 – код четвёртого задания
Рисунок 10 – результат
Заключительным – пятым – заданием являлось ознакомление с дополнительными функциями API. Требовалось выбрать 4 или более функция на свой выбор. Код – 11, результат – 12.
Рисунок 11 – код пятого задания
Рисунок 12 – результат работы кода пятого задания.
Листинг программы:
#include <iostream>
#include <unistd.h>
#include <limits.h>
#include <sys/utsname.h>
#include <time.h>
#include <chrono>
using namespace std; int main(){
char hostname[HOST_NAME_MAX];
char username[LOGIN_NAME_MAX];
gethostname(hostname, HOST_NAME_MAX);
getlogin_r(username, LOGIN_NAME_MAX);
cout << "\nИмя компьютера: " << hostname
<< "\nИмя пользователя: " << username << endl;
struct utsname data;
uname(&data);
cout << "\nВерсия ОС: " << data.sysname << " " << data.version << endl;
cout << "\nДата утверждения стандарта POSIX.1: "
<< sysconf(_SC_VERSION);
cout << "\nМаксимально допустимое количество одновременно работающих процессов: "
<< sysconf(_SC_CHILD_MAX);
cout << "\nМаксимально допустимое количество потоков, которое может одновременно открывать процесс: "
<< sysconf(_SC_STREAM_MAX) << endl;
time_t rawtime;
struct tm * timeinfo;
cout << "\nЧисло секунд, прошедших от 03:00 01.01.1970: " << time( &rawtime ) << endl;
timeinfo = localtime( &rawtime );
cout << "Текущее локальное время и дата: "
<< asctime(timeinfo) << endl;
cout << "\nМаксимально допустимое количество файлов, которое одновременно может открыть процесс: "
<< sysconf(_SC_OPEN_MAX) << endl;
cout << "Максимальное количество идентификаторов дополнительных групп: " << sysconf(_SC_NGROUPS_MAX) << endl;
cout << "Максимально допустимая длина имени устройства терминала: " << sysconf(_SC_TTY_NAME_MAX) << endl;
cout << "Количество тактов в секунду внутренних часов ядра: " << sysconf(_SC_CLK_TCK) << endl;
return 0; }