Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №2 Вариант 11.doc
Скачиваний:
22
Добавлен:
20.06.2014
Размер:
156.67 Кб
Скачать

Липецкий государственный технический университет

Кафедра Автоматизированных систем управления

ЛАБОРАТОРНАЯ РАБОТА №2

по дисциплине «Операционные системы»

«Реализация интерпретатора командной строки»

Студент

Ключанских А.С

подпись, дата

фамилия, инициалы

Группа

АС-10

Принял

доцент, к.т.н.

Журавлева М.Г.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2012

  1. Цель работы

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

  1. Задание кафедры

Вариант 11:

Реализовать на языке C/C++ интерпретатор командной строки (shell) для ОС Windows. Внутренняя команда согласно варианту:

Команда удаления (с подтверждением/отменой) всех файлов, заданных 2-м, 3-м, …, n-м (n  8) параметрами командной строки, в которых более k раз (k задано последним параметром командной строки) встретилось слово, заданное первым параметром командной строки.

  1. Краткие теоретические сведения

Процесс представляет собой объект, обладающий собственным независимым виртуальным адресным пространством, в котором могут размещаться код и данные, защищенные от других процессов. В свою очередь, внутри каждого процесса могут независимо выполняться один или несколько потоков. Именно поток является базовой единицей выполнения в Windows. Одной из важнейших функций Windows, обеспечивающих управление процессами, является функция CreateProcess, которая создает новый процесс с единственным потоком. При вызове этой функции требуется указать имя файла исполняемой программы. Гибкие и мощные возможности функции CreateProcess обеспечиваются ее десятью параметрами. Перечислим их:

BOOL CreateProcess

(

LPCTSTR lpApplicationName, // имя исполняемого модуля

LPTSTR lpCommandLine, // Командная строка

LPSECURITY_ATTRIBUTES lpProcessAttributes, // Указатель на структуру SECURITY_ATTRIBUTES

LPSECURITY_ATTRIBUTES lpThreadAttributes, // Указатель на структуру SECURITY_ATTRIBUTES

BOOL bInheritHandles, // Флаг наследования текущего процесса

DWORD dwCreationFlags, // Флаги способов создания процесса

LPVOID lpEnvironment, // Указатель на блок среды

LPCTSTR lpCurrentDirectory, // Текущий диск или каталог

LPSTARTUPINFO lpStartupInfo, // Указатель нас структуру STARTUPINFO

LPPROCESS_INFORMATION lpProcessInformation // Указатель нас структуру PROCESS_INFORMATION

);

Для упрощения работы рекомендуется использовать параметры, заданные по умолчанию.

  1. Описание экспериментальной установки и методики эксперимента

В процессе выполнения данной лабораторной работы был использован ноутбук 14" [Home] DNS (0133238) (HD) Pentium B940(2.0), 3072, 320, NV GT520M 1Gb, DVD-Smulti, WiFi, BT, Cam с установленной на нем средой разработки Microsoft Visual Studio 2010.

Алгоритм работы программы:

  1. Ввод пользователем некоторой строки (команды).

  2. Подсчет количества отдельных лексем (аргументов командной строки).

  3. Если количество аргументов равно единице и этот аргумент совпадает со словом “exit”, то перейти к пункту 10.

  4. Парсинг введенной командной строки (разбиение ее на отдельные аргументы).

  5. Если последний аргумент имеет значение “-f”, то перенаправить стандартный вывод в файл “output.txt”.

  6. Если первый аргумент имеет значение “delfiles”, то запустить функцию поиска заданного слова в заданных файлах и удаления после подтверждения пользователя тех файлов, в которых это слово встречается более заданного количества раз (функция лабораторной работы №1). Перейти к пункту 8. Иначе пункт 7.

  7. Попытаться запустить процесс, заданный первым аргументом командной строки. Если успешно – ждать пока процесс завершится, иначе вывести сообщение, что такой команды не существует.

  8. Если вывод был перенаправлен в файл, то направить его обратно в консоль.

  9. Освободить ресурсы, перейти к пункту 1.

  10. Освобождение всех занятых ресурсов и завершение работы программы.