- •Цель работы
- •Задание кафедры
- •Краткие теоретические сведения
- •Описание экспериментальной установки и методики эксперимента
- •Экспериментальные результаты
- •Листинг программы
- •Анализ полученных результатов
- •Список источников
- •Харт, Джонсон, м. Системное программирование в среде Windows, 3-е издание. : Пер. С англ. – м. : Издательский дом «Вильямс», 2005. – 592с. Ил.
Липецкий государственный технический университет
Кафедра Автоматизированных систем управления
ЛАБОРАТОРНАЯ РАБОТА №2
по дисциплине «Операционные системы»
«Реализация интерпретатора командной строки»
|
Студент |
|
|
|
Ключанских А.С |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-10 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
доцент, к.т.н. |
|
|
|
Журавлева М.Г. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2012
-
Цель работы
Изучить принципы построения интерпретаторов команд для многозадачных операционных систем и получить навыки практического использования средств системного программного обеспечения для порождения потоков и процессов, перенаправления ввода/вывода.
-
Задание кафедры
Вариант 11:
Реализовать на языке C/C++ интерпретатор командной строки (shell) для ОС Windows. Внутренняя команда согласно варианту:
Команда удаления (с подтверждением/отменой) всех файлов, заданных 2-м, 3-м, …, n-м (n 8) параметрами командной строки, в которых более k раз (k задано последним параметром командной строки) встретилось слово, заданное первым параметром командной строки.
-
Краткие теоретические сведения
Процесс представляет собой объект, обладающий собственным независимым виртуальным адресным пространством, в котором могут размещаться код и данные, защищенные от других процессов. В свою очередь, внутри каждого процесса могут независимо выполняться один или несколько потоков. Именно поток является базовой единицей выполнения в 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
);
Для упрощения работы рекомендуется использовать параметры, заданные по умолчанию.
-
Описание экспериментальной установки и методики эксперимента
В процессе выполнения данной лабораторной работы был использован ноутбук 14" [Home] DNS (0133238) (HD) Pentium B940(2.0), 3072, 320, NV GT520M 1Gb, DVD-Smulti, WiFi, BT, Cam с установленной на нем средой разработки Microsoft Visual Studio 2010.
Алгоритм работы программы:
-
Ввод пользователем некоторой строки (команды).
-
Подсчет количества отдельных лексем (аргументов командной строки).
-
Если количество аргументов равно единице и этот аргумент совпадает со словом “exit”, то перейти к пункту 10.
-
Парсинг введенной командной строки (разбиение ее на отдельные аргументы).
-
Если последний аргумент имеет значение “-f”, то перенаправить стандартный вывод в файл “output.txt”.
-
Если первый аргумент имеет значение “delfiles”, то запустить функцию поиска заданного слова в заданных файлах и удаления после подтверждения пользователя тех файлов, в которых это слово встречается более заданного количества раз (функция лабораторной работы №1). Перейти к пункту 8. Иначе пункт 7.
-
Попытаться запустить процесс, заданный первым аргументом командной строки. Если успешно – ждать пока процесс завершится, иначе вывести сообщение, что такой команды не существует.
-
Если вывод был перенаправлен в файл, то направить его обратно в консоль.
-
Освободить ресурсы, перейти к пункту 1.
-
Освобождение всех занятых ресурсов и завершение работы программы.