Выбор языка программирования, среды разработки

      Комментарии к записи Выбор языка программирования, среды разработки отключены

ВВЕДЕНИЕ

В рамках данного курсового проекта необходимо реализовать usb сниффер для операционной системы Windows. Usb сниффер – это программа, предназначенная для копирования файлов с флэшек и внешних жестких дисков, которые подключены и/или подключаются к компьютеру во время работы данной программы.

ОБЗОР И ВЫБОР МЕТОДОВ РЕШЕНИЯ ПОСТАВЛЕННОЙ ЗАДАЧИ

Основными проблемами при написании usb сниффера являются:

1. Отлавливание события подключения флэшки.

2. Копирование целого дерева каталогов с вложенными файлами.

Для решения первой проблемы существует несколько методов. Это получение сообщений о подключении внешних устройств от системы и проверка томов с определением подключено ли какое-либо устройство. В данном примере был рассмотрен второй случай, а именно проверка на ошибки при обращении к определенной директории с помощью функций SetCurrentDirectory(),GetCurrentDirectory() и GetLastError().

При рассмотрении второй проблемы было найдено также 2 пути ее решения:

1. Рекурсивный поиск в каталогах с помощью функций FindFirstFile() и FindNextFile(), создание директорий с такими же именами функцией CreateDirectory() и последующее копирование функцией CopyFile().

2. Копирование сразу всего дерева каталогов с вложенными файлами с помощью структуры типа SHFILEOPSTRUCT и функции SHFileOperation() с указанием флага функции FO_COPY.

В данном случае был выбран и реализован второй вариант.

Для решения поставленной задачи будет использован язык C++, а так же все необходимые функции WINAPI.

ВЫБОР ЯЗЫКА ПРОГРАММИРОВАНИЯ, СРЕДЫ РАЗРАБОТКИ

C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. В частности:

Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы).

Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов (память, файлы, семафоры и т. п.), а также позволяет гарантированно выполнять переходы состояний программы, не обязательно связанные с освобождением ресурсов (например, запись в журнал).

Пользовательские функции-операторы позволяют кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.

Язык поддерживает понятия физической (const) и логической (mutable) константности. Это делает программу надёжнее, так как позволяет компилятору, например, диагностировать ошибочные попытки изменения значения переменной. Объявление константности даёт программисту, читающему текст программы дополнительное представление о правильном использовании классов и функций, а также может являться подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять изнутри объекта цели вызова метода (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при использовании кэшей и ленивых вычислений.

Используя шаблоны, возможно создавать обобщённые контейнеры и алгоритмы для разных типов данных, а также специализировать и вычислять на этапе компиляции.

Возможность имитации расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую. Например, библиотека Boost.Bind позволяет связывать аргументы функций.

Возможность создания встроенных предметно-ориентированных языков программирования. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++.

Используя шаблоны и множественное наследование можно имитировать классы-примеси и комбинаторную параметризацию библиотек. Такой подход применён в библиотеке Loki, класс SmartPtr которой позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать около 300 видов «умных указателей» для управления ресурсами.

Кроссплатформенность: стандарт языка накладывает минимальные требования на ЭВМ для запуска скомпилированных программ. Для определения реальных свойств системы выполнения в стандартной библиотеке присутствуют соответствующие возможности (например, std::numeric_limits ). Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.

Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования — при необходимости язык позволяет обеспечить максимальную эффективность программы.

Имеется возможность работы на низком уровне с памятью, адресами.

Высокая совместимость с языком C, позволяющая использовать весь существующий C-код (код на C может быть с минимальными переделками скомпилирован компилятором C++; библиотеки, написанные на C, обычно могут быть вызваны из C++ непосредственно без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на C, вызывать код, написанный на С++)

Статьи к прочтению:

Программирование на языке C/C++. Урок #1: Введение в курс, установка среды и компилятора


Похожие статьи: