Skip to content

Roy2player/Nokia-test-task

Repository files navigation

Nokia test task

mem_block and mem_file

  • Разработка и отладка осуществлялась на win 10 в Visual Studio 2019;
  • Программа ищет файлы *.txt в своей папке и заполняет блоки памяти данными из них;
  • После запуска программы нужно ввести число блоков и размер одного блока (бит).

Комментарии к реализации

Есть три основных требования:

  1. Потокобезопасность. После успешного открытия файла он блокируется для других процессов с помощью функции LockFile (Чтение происходит с помощью функции CreateFileA).
  2. Функция разделяет блоки памяти на использованные и неиспользованные. В main объявляется два блока памяти, под первый выделяется память, он же хранит незаполненные блоки. Заполненные блоки памяти формируют второй список.
  3. Функция разделяет файлы на прочтенные и не прочтенные. Если есть хотя бы один заполненный блок памяти - список заполненных блоков начинает указывать на начало списка выделенных блоков (первый из которых - заполнен), как только основная функция заполнения блоков завершается, вызывается функция, которая отсекает "хвост" из незаполненных блоков у списка заполненных. Аналогично происходит со списком файлов.
  4. Т.к. основная функция программы принимает указатели на списки и оперирует ими, она возвращает структуру, содержащую указатели на каждый обновленный список блоков в управляющую функцию.
  5. Очистка памяти. Т.к. мы создаём указатели на структуры использование деструкторов не приведет к желаемому результату. По завершению основного кода программы вызывается функция очистки памяти.

Пояснения:

  • Если блок памяти заполнен не полностью, он считается не заполненным.
  • Если файл загружен не полностью, он считается не загруженным. Но программа не запоминает, на каком символе остановилась загрузка последнего файла, если такая ситуация возникла. На мой взгляд, лучшим решением такой задачи будет добавление к структуре файла переменной, хранящей количество считанной информации. Но я модифицировать структуры из задания не стал, ну вы поняли)
  • После выполнения программы в консоль будет выведено первоначальное состояние блоков памяти, список считанных файлов, заполненные блоки, не заполненные блоки, загруженные файлы и не загруженные файлы, а так же уведомления об очистке памяти.
  • В программе за комментированы почти все шаги, я знаю, что это плохо! Но, этим я хочу максимально объяснить ход своих мыслей, ибо это тестовое задание.

About

mem_block and mem_file

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages