Операционные системы

Автор работы: Пользователь скрыл имя, 06 Февраля 2014 в 10:27, курсовая работа

Краткое описание

В данной курсовой работе будут описаны некоторые особенности файловой системы Unix, а также программно реализованы некоторые команды ОС Unix в среде ОС Windows.

Содержание

Введение………………………………………………………………….…….………..5
1 Описание файловой системы Unix………………………………………………….6
2 Постановка задачи…………………………………………………………………….8
3 Описание команд и сравнение их с родственными…………………………………8
4 Выбор средств реализации…………………………………………………………..10
5 Программная реализация эмулятора………………………………………………..12
5.1 Структурная схема алгоритма используемого в программе……………...12
5.2 Модульная структура программы…………………………………………..13
5.3 Описание диалога с пользователем………………………………………...14
Заключение………………………………………….………………………….………17
Список литературы………………………………………………………………….…18
Приложение А……………………………………………………………………….....19

Прикрепленные файлы: 1 файл

Курсовая по ОС.doc

— 274.00 Кб (Скачать документ)

Reset(var F [: File; RecSize: Word ] ) открывает существующий файл, связанный с файловой переменной F. Параметр RecSize задается для нетипизированных файлов и устанавливает длину записи в байтах.

Также были использованы некоторые  процедуры управления файлами:

FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer - выделяет в памяти необходимые ресурсы для поиска в каталоге и шаблоне Path (например, c:\MyDir\*.*) файлов, удовлетворяющих шаблону и имеющих атрибуты Attr (см. FileSetAttr]. При успешном завершении возвращает 0, в противном случае - код ошибки Windows. Результаты поиска заносятся в запись SearchRec. Из полей этой записи можно извлечь результаты: Time: Integer — время создания файла, Size: Integer — его размер, Attr: Integer — его атрибуты, Name — имя файла и некоторые другие.

FindNextfvar F: TSearchRec): Integer - продолжает поиск, начатый функцией FindFirst. Если нашелся новый файл, возвращает 0, в противном случае — код ошибки Windows. Результаты поиска заносятся в запись SearchRec .

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

 

5 Программная реализация  эмулятора

5.1 Описание программы


 



                                  


            

  


  

     


 

 



 


 


 

 

 

 

 

 

Рисунок 1 – структурная  схема алгоритма используемого  в программе

 

5.2 Модульная структура

 

Данную программу можно  условно разделить на 3 модуля.

1. Интерфейс.

2. Модуль ввода данных.

3. Модуль выполнения команд.


 

 

 

 

 

 

 

Рисунок 2 – монолитно-модульная структура программы

 

1. Интерфейс представляет  собой форму, на которой компонент Memo, через данный модуль осуществляется диалог с пользователем.

2. Модуль ввода содержит  в себе процедуры, с помощью  которых вводятся начальные данные. Введенная строка разбивается на команду ключ и массив параметров в который например могут входить файлы или еще что то в зависимости от команды. Выходными данными для данного модуля является команда, ключ если он был введен и массив  параметров типа string.

3. Модуль выполнения команд представляет собой набор процедур и функций, через которые осуществляется непосредственное выполнение необходимых операций над файлами. Данный модуль условно можно разделить еще на 8 частей, которые будут соответствовать командам. Выходными данными для данного модуля является либо стандартный текст, либо выходной файл в случае перенаправления вывода.

 

5.3 Описание диалога с пользователем

 

1. Для запуска программы  необходимо открыть файл KursOS.exe, после чего на экране появится форма:

Рисунок 3 – вид формы после запуска

 

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

 

                 

         

Рисунок 4 – сообщения об ошибках.

Следует заметить что  последняя ошибка возникает лишь в том случае когда введена команда которая работает только с 2 файлами (например команды ср comm, cmp).

Далее будет приведено  несколько примеров работы программы  и выполнения команд.

Рисунок 5 – выполнение команды cat и wc.

Рисунок 6 – выполнение команды cmp man и cp.

 

Следует заметить что  команда ср была выполнена с ключом «-i»,поэтому программа выдала соответствующий запрос о выполнении операции:

Рисунок 7 – запрос на подтверждения копирования.

Рисунок 8 – выполнение команды egrep и comm, а также реализация мета символов.

Также в данном приложении реализовано перенаправление вывода что позволяет вывести результат  в файл.

 

 

Заключение

 

Главным итогом выполнения курсовой работы по дисциплине «Операционные» на тему «Эмуляция командного процессора ОС Unix  в среде ОС Windows» является разработка программы реализующей решение поставленной задачи.

Для решения поставленной задачи была выбрана среда быстрой  разработки приложений Delphi 7. На мой взгляд это наиболее удобный способ добиться решения задачи такого уровня в поставленные сроки. Простой интерфейс написанный на самом же Delphi, удобная пошаговая отладка – это далеко не все преимущества этой среды. Работа по созданию программы помогла мне более глубже изучить среду программирования Delphi . Подводя итог можно сказать, что поставленная задача успешно решена. Мы имеем отлично функционирующее приложение с понятным и доступным интерфейсом.

 

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

1. А.Я. Архангельский Программирование в Delphi7. - М.: Бином 2003.–1152 с.

2. . С.Л.Скловская. - Команды Linux. Справочник, 3-е изд., псрераб. и доп.

СПб.: ООО «ДиаСофтЮП», 2004. - 848 с.

3. Е.Н.Королев. – Эмуляция командного процессора. Методические указания по курсу операционные системы. Воронеж 2004 – 23 с.

 

 

Приложение А

 

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

 

program Project1;

 

uses

  Forms,

  Unit1 in 'Unit1.pas' {Form1};

 

{$R *.res}

 

begin

  Application.Initialize;

  Application.CreateForm(TForm1, Form1);

  Application.Run;

end.

 

Листинг модуля:

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls,math;

 

type

  TForm1 = class(TForm)

    Memo1: TMemo;

    procedure Memo1KeyPress(Sender: TObject; var Key: Char);

    procedure Memo1KeyUp(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure FormCreate(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  i,j,k,flag,w:integer;

  wfail: boolean;

  par,s,ST,comand, kl,str,str1: string;

  fil: Array [1..50] of TextFile;

  outfil:  TextFile;

  imaf: Array [1..50] of string;

  F:TsearchRec;

implementation

 

{$R *.dfm}

 

procedure vvodvivod;

begin

  if imaf[k-1]='>' then

  begin

   rewrite(fil[k]);

  w:=k;

  k:=k-2;

  wfail:=true;

  end;

end;

 

Procedure parametr;

Var atr: integer;

begin

s:=''; k:=0; i:=1;

for i:=1 to length(par) do

begin

if par[i]=' ' then continue;

s:=s+par[i];

if (par[i]<>' ') and ((par[i+1]=' ') or (i=length(par))) then

begin

   inc(k);

   imaf[k]:=s;

   s:='';

end;

end;

if comand='egrep' then str:=imaf[1];

if (imaf[1]='*.txt') or (imaf[1]='*.pas') or ((comand='egrep') and (imaf[2]='*.txt') or (imaf[2]='*.pas'))

then

  begin

  if imaf[k-1]='>' then begin s:=imaf[k]; wfail:=true; end;

  k:=1;

  atr:=fadirectory;

  GetDir(0,st);

  if (imaf[1]='*.txt') or ((comand='egrep')and(imaf[2]='*.txt')) then FindFirst(st+'\*.txt',atr,F);

  if (imaf[1]='*.pas') or ((comand='egrep')and(imaf[2]='*.pas')) then FindFirst(st+'\*.pas',atr,F);

  AssignFile(fil[1],F.Name);

  imaf[1]:=F.Name;

  if comand='egrep' then begin

                        imaf[2]:=F.Name;

                        AssignFile(fil[2],F.Name);

                        k:=2;

                      end;

  while findNext(F)=0 do

  begin

    if F.Name=s then continue;

    inc(k);

    AssignFile(fil[k],F.Name);

    imaf[k]:=F.Name;

  end;

  end else For i:=1 to k do

            AssignFile(fil[i],imaf[i]);

if wfail= true then begin

                      imaf[k+1]:='>';

                      imaf[k+2]:=s;

                      k:=k+2;

                      AssignFile(fil[k],s);

                    end;

if (comand='dc') and (imaf[k-1]='>') and (imaf[k]<>'')  then AssignFile(fil[k],imaf[k]);

end;

 

procedure proverka;

begin

if FileExists(imaf[j])=false then

begin

   showMessage('Файла с таким именем не существует');

   flag:=10;

end;

end;

 

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);

var

    pos,shet,kstrok,wsesim,wsestr,wseslov, kslov,ksovp,b,nsim,vsesovp: integer;

    s1,s2,resul:real;

 

begin

if key=#13 then

begin

flag:=0;

comand:='';  st:='';

kl:=''; wfail:=false; ksovp:=0;

par:=''; b:=1; nsim:=0; vsesovp:=0;

kstrok:=0; kslov:=0; shet:=0;wsesim:=0; wsestr:=0;wseslov:=0;

pos:=memo1.CaretPos.y;

  For i:=1 to length(memo1.Lines.Strings[pos]) do

  begin

    if (memo1.Lines.Strings[Pos][i]=' ') or (memo1.Lines.Strings[Pos][i]='$')  then continue else

    begin

    if flag=2 then par:=par+memo1.Lines.Strings[pos][i];

    if (flag=2) and (par<>'') and (memo1.Lines.Strings[pos][i+1]=' ')then par:=par+' ';

    if flag=1 then

      begin

        kl:=kl+memo1.Lines.Strings[pos][i];

        if (kl[1]<>'-') then begin

                              flag:=2;

                              par:=kl[1];

                              kl:='';

                              if memo1.Lines.Strings[pos][i+1]=' ' then par:=par+' ';

                              end;

        if memo1.Lines.Strings[pos][i+1]=' ' then flag:=2;

      end;

      if flag=0 then begin

                      comand:=comand+memo1.Lines.Strings[pos][i];

                       if memo1.Lines.Strings[pos][i+1]=' ' then flag:=1;

                    end;

    end;

 

  end;

 

parametr;

vvodvivod;

flag:=0;

if comand='wc' then flag:=1;

if comand='cmp' then flag:=2;

if comand='egrep' then flag:=3;

if comand='dc' then flag:=4;

if comand='cat' then flag:=5;

if comand='comm' then flag:=6;

if comand='cp' then flag:=7;

if comand='man' then flag:=8;

case flag of

0: begin

    ShowMessage('Один из параметров введен не верно или не введен совсем!');

    Exit;

   end;

1:{wc}

begin

   if (kl<>'-w') and (kl<>'-c') and (kl<>'')

   and (kl<>'-l') then  begin

                          showMessage('Неверный ключ') ;

                          exit;

                         end;

   if kl='' then flag:=0;

   if kl='-c' then flag:=1;

   if kl='-l' then flag:=2;

   if kl='-w' then flag:=3;

  For j:=1 to k do

  begin

  kstrok:=0; kslov:=0; shet:=0;

   proverka;

   if flag=10 then exit;

   Reset(fil[j]);

   while Eof(fil[j])<>true do

   begin

     readln(fil[j],str);

     shet:=shet+length(str);

     kstrok:=kstrok+1;

     For i:=1 to length(str)do

     if (str[i]<>' ') and ((str[i+1]=' ') or (i=length(str))) then kslov:=kslov+1

   end;

   case flag of

   0:if wfail=false then

   memo1.Lines.Add(inttostr(kstrok)+'   '+inttostr(kslov)+'   '+inttostr(shet)+'   '+imaf[j]) else

   writeln(fil[w],inttostr(kstrok)+'   '+inttostr(kslov)+'   '+inttostr(shet)+'   '+imaf[j]);

   1:if wfail=false then memo1.Lines.Add(inttostr(shet)+'   '+imaf[j])else

     writeln(fil[w],inttostr(shet)+'   '+imaf[j]);

   2:if wfail=false then memo1.Lines.Add(inttostr(kstrok)+'   '+imaf[j])else

     writeln(fil[w],inttostr(kstrok)+'   '+imaf[j]);

   3:if wfail=false then memo1.Lines.Add(inttostr(kslov)+'   '+imaf[j])else

      writeln(fil[w],inttostr(kslov)+'   '+imaf[j]);

   end;

   wsesim:=wsesim+shet;

   wsestr:=wsestr+kstrok;

   wseslov:=wseslov+kslov;

    closeFile(fil[j]);

end;

     if k>1 then

      case flag of

   0:if wfail=false then

   memo1.Lines.Add(inttostr(wsestr)+'   '+inttostr(wseslov)+'   '+inttostr(wsesim)+'   '+'итого') else

   writeln(fil[w],inttostr(wsestr)+'   '+inttostr(wseslov)+'   '+inttostr(wsesim)+'   '+'итого');

   1:if wfail=false then memo1.Lines.Add(inttostr(wsesim)+'   '+'итого')else

     writeln(fil[w],inttostr(wsesim)+'   '+'итого');

   2:if wfail=false then memo1.Lines.Add(inttostr(wsestr)+'   '+'итого')else

     writeln(fil[w],inttostr(wsestr)+'   '+'итого');

   3:if wfail=false then memo1.Lines.Add(inttostr(wseslov)+'   '+'итого')else

     writeln(fil[w],inttostr(wseslov)+'   '+'итого');

   end;

   if wfail=true then  closeFile(fil[w]);

end;

2:begin   {cmp}

    if (kl<>'-l') and (kl<>'') then  begin

                                    showMessage('Неверный ключ') ;

                                    exit;

                                   end;

     if k<>2 then begin

                   showMessage('колличество файлов должно быть равно 2');

                   exit

                 end;

   if kl='' then flag:=0;

   if kl='-l' then flag:=1;

       Reset(fil[1]);

       Reset(fil[2]);

       while (Eof(fil[1])<>true) or  (Eof(fil[2])<>true) do

       begin

       inc(kstrok);

       readln(fil[1],str);

       readln(fil[2],str1);

     case flag of

     0:for i:=1 to max(length(str1),length(str)) do

       if str[i]<>str1[i] then

                          begin

                            if wfail=false then memo1.Lines.Add('Line: '+inttostr(kstrok)+'  char:  '+inttostr(i))else

                             writeln(fil[w],'Line: '+inttostr(kstrok)+'  char:  '+inttostr(i));

                             if wfail=true then  closeFile(fil[w]);

                            exit;

                          end;

     1:begin

     i:=1; j:=1; nsim:=1; 

       while  (flag<>3)do

       begin

       st:=inttostr(nsim-1)+'  '+inttostr(ord(str[i]))+'  '+inttostr(ord(str1[j]));

       if str[i]<>str1[j] then if wfail=false then memo1.Lines.Add(st) else

                                                   writeln(fil[w],st);

                     if i>length(str) then begin

                               readln(fil[1],str);

                               i:=1;

                             end;

                     if j>length(str1) then begin

                               readln(fil[2],str1);

                               j:=1;

                             end;

              if ((Eof(fil[1])=true) and (i>length(str)))  or

               ((Eof(fil[2])=true) and (j>length(str1))) then exit;

            inc(i);inc(j);inc(nsim);

       end;

       end;

     end;

     end;

   if wfail=true then  closeFile(fil[w]);

  end;

3: begin     {egrep}

     if kl='' then flag:=1;

     if kl='-b' then flag:=2;

     if kl='-c' then flag:=3;

     if (kl<>'-b') and (kl<>'-c') and (kl<>'') then  begin

                                                       showMessage('Неверный ключ') ;

                                                       exit;

                                                     end;

     For j:=2 to k do

       begin

       shet:=1; b:=0;

          proverka;

          if flag=10 then exit;

         Reset(fil[j]);

         while Eof(fil[j])<>true do

           begin

             readln(fil[j],str1);

             For i:=1 to length(str1) do

                           begin

                             inc(b);

                             if (length(str)=1) and (str1[i]=str[1]) then

Информация о работе Операционные системы