RSS    

   Курсовая работа: Эмуляция командного процессора ОС UNIX в среде Windows 9x

RENAME (REN) – переименование файла или группы файлов;

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

COMMAND – запуск командного процессора;

EXIT – выход из командного процессора.

3. Программная реализация

3.1 Выбор языка программирования

Для разработки эмуляции командного процессора ОС UNIX в среде Windows9x была разработана программа на языке Borland Pascal 7.0.

Язык Pascal, начиная с момента своего создания Н. Виртом в 1971 году, играет особую роль и в практическом программировании, и в его изучении. С непревзойденной четкостью в нем реализованы принципы структурного программирования. Pascal стал первым языком программирования, с которым знакомится большинство будущих программистов.

Среда Borland Pascal 7.0 обладает мощными и удобными средствами для написания и отладки кода программы. Также он поддерживает концепции объектно-ориентированного проектирования, хорошо структурирован и удобен в обращении.

3.2 Инструкция пользователю

Запуск программы в ОС Windows 95/98/Me/2000/XP:

Кнопка “Пуск” – “Выполнить” – “Обзор”, найти и выделить файл с именем Unix_com.exe, - нажать “OK”. После запуска на экране монитора появится следующее сообщение: - >Эмулятор команд ОС UNIX<-.

Символ $ - приглашение к вводу команд. При вводе команды exit происходит выход в систему. При неправильном вводе команды или при любой другой ошибке появляется сообщение: “Команда введена неправильно!”.

3.3 Описание структуры программы

Функции:

Unix_num – определение номера команды,

Error – ошибка при неверном формате команды,

Compare – сравнение двух строк.

Процедуры:

Reout – определение имени устройства при перенаправлении ввода-вывода,

Spaces – удаление лишних пробелов из строки,

Attr – атрибуты файлов,

Diff – сравнение файлов,

Scan – составление списка файлов указанного каталога,

Man – справка,

LS – вывод списка файлов в каталоге,

DIRCMP – сравнение содержимого двух каталогов,

TR – поиск и замена,

COMM – построчное сравнение содержимого двух текстовых файлов,

RMDIR – удаление каталога,

CAT – вывод содержимого файлов,

MV - переименование или перемещение.

3.4 Используемые модули

Модулю System отводится ведущая роль при организации программ на Pascal, так как формирование загрузочного выполнимого EXE-файла начинается именно с этого модуля. В силу своей исключительной важности подключение данного модуля в программу не требует отдельной строки вида Uses System. Интегрированная система включает модуль System в любую пользовательскую программу автоматически.

Процедуры и функции модуля Dos предназначены для обеспечения интерфейса с программами операционной системы. После загрузки DOS большинство пользовательских функций реализуется через прерывание с номером 21h, называемое прерыванием DOS.

3.5 Пример работы программы

-> Эмулятор команд ОС UNIX <-

$ man man

Описание команд ОС UNIX

man имя_команды

Список доступных команд:

ls, dircmp, tr, comm, rmdir, cat, mv

Выход – команда exit

$ ls

UNIX_COM.EXE UNIX_COM.PAS

$ dircmp 1 2

Файлы из первого каталога

213.TXT

Файлы из второго каталога

321.TXT

Файлы общие для двух каталогов

123.TXT

$ comm. –23 5.TXT 7.TXT

matrix

matrix reload

$ rmdir 777

Каталог 777 удален.

$ cat 7.txt

matrix revolution

matrix reload

matrix

$ mv 7.txt 9.txt

Файл перенесен!

Заключение

В курсовой работе по дисциплине "Операционные системы" на тему "Эмуляция командного процессора ОС UNIX в среде Windows 9х" были рассмотрены вопросы касающиеся файловой системы операционных систем UNIX и MS-DOS.

Разработана программа на языке Pascal. В данной программе были реализованы следующие команды ls, dircmp, tr, comm., rmdir, cat, mv и man. Работа по созданию программы позволила приобрести практические навыки системного программирования.

Программа достаточно не требовательна к аппаратному и программному обеспечению.

Список литературы

1. Паскаль для персональных компьютеров: Справ. пособие / Ю.С. Бородич, А.Н. Вальвачев, А.И. Кузьмич. – Мн.: Выш. шк.: БФ ГИТМП “НИКА”, 1991. – 365 с.: ил.

2. Информатика: Учеб. пособие для студ. вузов / А.В. Могилев, Н.И. Пак, Е.К. Хеннер; под ред. Е.К. Хеннера. – М.: Изд. центр «Академия», 2000. – 816 с.

3. UNIX: Справочник / Рейчард К., Фостер - Джонсон Э. – Спб: Питер Ком, 1999. - 384 с.

Приложение А

Листинг программы

Program unix_com;

Uses Dos;

Var comu:string;

s_or_f:text;

k:integer;

Function Unix_num (comu:string):integer;

const inp:array[1..9] of string[6] = (

'ls', 'dircmp', 'tr', 'comm', 'rmdir', 'cat', 'mv', 'man', 'exit');

var f:boolean;

i:integer;

Begin f:=False;

for i:=1 to 9 do

if (Copy(comu, 1, Pos(' ', comu)-1)=inp[i]) or (comu=inp[i]) then

begin

f:=True;

Break;

end;

if not f then i:=11;

Unix_num:=i;

End;

Procedure Reout(var comu:string);

var Dev:string;

Flag:boolean;

Begin

Dev:='con';

Flag:=False;

if Pos ('>', comu) <> 0 then

begin

if Pos ('>>', comu) <> 0 then

begin

Delete (comu, Pos('>', comu), 1);

Flag:=True;

end;

Dev:=Copy(comu, Pos('>', comu)+1, Length(comu)-Pos('>', comu)+1);

if Dev[1]='' then Delete(dev, 1, 1);

Delete(comu, Pos('>', comu), Length(comu)-Pos('>', comu)+1);

end;

Assign (s_or_f, dev);

if Flag then begin

{$I-} Append (s_or_f); {$I+}

if IOResult <> 0 then Rewrite (s_or_f);

end

else Rewrite(s_or_f);

End;

Function Error (comu:string):boolean;

Begin

Error:=False;

if Pos(' ', comu)=0 then

begin

WriteLn('Команда введена неверно!');

Error:=True;

end;

end;

Procedure Spaces (var s:string);

Begin

while Pos(' ', s)<>0 do Delete(s, Pos(' ', s), 1);

while Pos(' ', s)=1 do Delete(s, 1, 1);

if s[Length(s)]=' ' then Delete (s, Length(s), 1);

end;

Procedure Attr(at:byte);

const Ast:array[0..6] of string[5] = (

'-', 'R', 'H', 'S', 'V', '<DIR>', 'A');

A16:array[0..6] of byte = (

$00, $01, $02, $04, $08, $10, $20);

var i, i1, i2, i3, i4, i5:integer;

at1:byte;

ss:string[20];

Begin

for i:=0 to 1 do

for i:=1 to 2 do

for i:=2 to 3 do

for i:=3 to 4 do

for i:=4 to 5 do

for i:=5 to 6 do

begin

at1:=A16[i]+A16[i1]+A16[i2]+A16[i3]+A16[i4]+A16[i5];

if at1=at then

begin

ss:=Ast[i]+Ast[i1]+Ast[i2]+Ast[i3]+Ast[i4]+Ast[i5]+'';

write(s_or_f, ss);

Exit;

end;

end;

End;

Procedure Ls(comu: string);

var

Info: SearchRec;

dt: DateTime;

atr: byte;

keys, maska, cmd1: string;

o1, p1, a1, p, l, r: boolean;

nn, pos1: integer;

c0: string[1];

begin

atr := $3F;

Spaces(comu);

cmd1 := comu;

Delete(comu, 1, 3);

keys := '';

if Pos('-', comu) <> 0 then

begin

if Pos(' ', comu) = 0 then

pos1 := Length(comu)

else

pos1 := Pos(' ', comu);

keys := Copy(comu, 1, pos1);

Delete(comu, 1, pos1);

end;

if Pos('l', keys) <> 0 then

l := True

else

l := False;

if Pos('1', keys) <> 0 then

o1 := True

else

o1 := False;

if Pos('a', keys) <> 0 then

a1 := True

else

a1 := False;

if Pos('p', keys) <> 0 then

p1 := True

else

p1 := False;

if Pos('R', keys) <> 0 then

r := True

else

r := False;

if comu <> '' then

begin

if comu[Length(comu)] <> '\' then

maska := comu + '\*.*'

else

maska := comu + '*.*'

end

else

maska := '*.*';

FindFirst(maska, atr, Info);

if Info.Name = '.' then

FindNext(Info);

nn := 0;

repeat

if (DosError = 0) and a1 and (Info.Name ='..') then

begin

Write(s_or_f, Info.Name, ' ':(15 - Length(Info.Name)));

Inc(nn);

end;

if (DosError = 0) and (Info.Name <> '..') then

begin

if (Info.Attr = $10) and p1 then

Info.Name := Info.Name + '\';

if (Info.Attr = $02) or (Info.Attr = $10) then

begin

if a1 then

begin

Write(s_or_f, Info.Name, ' ':(15 - Length(Info.Name)));

Inc(nn);

end;

end

else

begin

Write(s_or_f, Info.Name, ' ':(15 - Length(Info.Name)));

Inc(nn);

end;

if l then

begin

Attr(Info.Attr);

UnpackTime(Info.Time, DT);

with DT do

begin

c0 := '';

if Day < 10 then

c0 := '0';

Write(s_or_f, c0, Day, '-');

c0 := '';

if Month < 10 then

c0 := '0';

Write(s_or_f, c0, Month, '-', Year);

c0 := '';

if Hour < 10 then

c0 := '0';

Write(s_or_f, ' ', c0, Hour, ':');

c0 := '';

if Min < 10 then

c0 := '0';

if o1 then

begin

WriteLn(s_or_f, c0, Min, ' ');

Inc(k);

end

else

begin

if nn = 3 then

begin

WriteLn(s_or_f, c0, Min, ' ');

nn := 0;

Inc(k);

end

Страницы: 1, 2, 3, 4


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.