Знакомство с возможностями операционной системы по работе с файловой системой, многопоточные приложения, взаимодействию между потоками.
Рекомендуемыми языками для разработки являются C/C++ и Rust.
Требования к сборке проекта остаются такими же, как в предыдущей лабораторной работе.
Общая часть задания для всех вариантов: консольное приложение должно использовать возможности операционной системы по обеспечению многопоточности и корректно закрывать потоки, освобождать ресурсы, как минимум, при получении сигнала SIGINT
.
-
В рабочем каталоге лежат входные текстовые файлы. Каждый файл состоит из двух строк. В первой строке - число, обозначающее действие, а во второй - числа с плавающей точкой, разделенные пробелом.
Действия могут быть следующими:
1
- сложение2
- умножение3
- сумма квадратов
Необходимо написать многопоточное приложение, которое выполнит требуемые действия над числами и сумму результатов запишет в отдельный файл. Название рабочего каталога и файла с результатами передаются в виде аргументов командной строки.
-
После запуска программы один поток начинает писать в файл, заданный через аргумент командной строки, некоторый текст в вечном цикле. По нажатию клавиши
+
создаётся ещё один поток, по нажатию клавиши-
удаляется последний добавленный. Каждый поток посимвольно пишет в файл свою уникальную строку. При этом операция вывода строки должна быть атомарной, т.е. процесс вывода должен быть синхронизирован таким образом, чтобы строки не перемешивались.
- Michail Kerisk. The Linux programming interface. Обзор на хабре.
- Стивен Раго, У. Ричард Стивенс. UNIX. Профессиональное программирование, 3-е издание.