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
else
Write(s_or_f, c0, Min, ' ')
end;
end;
end
else
begin
if o1 then
begin
WriteLn(s_or_f);
Inc(k);
end
else
if nn = 3 then
begin
WriteLn(s_or_f);
Inc(k);
nn := 0;
end;
end;
if (Info.Attr = $10) and r then
begin
WriteLn(s_or_f);
WriteLn(s_or_f, 'Просмотр каталога ', Info.Name);
Inc(k);
keys := '';
if p then
keys := ' |more';
if cmd1[Length(cmd1)] <> '\' then
begin
comu := cmd1;
Delete(comu, 1, 3);
if Pos('-', comu) <> 0 then
begin
if Pos(' ', comu) = 0 then
pos1 := Length(comu)
else
pos1 := Pos(' ', comu);
Delete(comu, 1, pos1);
end;
if comu = '' then
Ls(cmd1 + ' ' + Info.Name + keys)
else
Ls(cmd1 + '\' + Info.Name + keys);
end
else
Ls(cmd1 + Info.Name + keys);
end;
end;
FindNext(Info);
until DosError <> 0;
WriteLn(s_or_f);
Inc(k);
end;
Procedure Diff(comu: string);
var
fname1, fname2, f: string[80];
f1, f2: text;
s1, s2: string;
r, c: integer;
Function Compare(s1, s2: string): integer;
var
i, k: integer;
Begin
k := 0;
for i := 1 to Length(s2) do
begin
if i > Length(s1) then
Break;
if s2[i] = s1[i] then
k := k + 1;
end;
Compare := Round(100 * k / (Length(s2) +
Abs(Length(s1) - Length(s2))));
End;
Begin
Delete(comu, 1, 5);
fname1 := Copy(comu, 1, Pos(' ', comu) - 1);
Delete(comu, 1, Pos(' ', comu));
fname2 := comu;
Assign (f1, fname1); Reset (f1);
Assign (f2, fname2); Reset (f2);
r := 0;
while True do
begin
s1 := #0;
s2 := #0;
if not EOF(f1) then
ReadLn(f1, s1);
if not EOF(f2) then
ReadLn(f2, s2);
r := r + 1;
if s1 <> s2 then
begin
Write(r, ' ');
c := Compare(s1, s2);
if c > 80 then
WriteLn('c')
else
WriteLn('d');
WriteLn('<', s1);
if c > 80 then
WriteLn('----')
else
WriteLn(r, ' a');
WriteLn('>', s2);
end;
if EOF(f1) and not EOF(f2) then
begin
WriteLn('Второй файл длинее первого!');
Break;
end;
if EOF(f2) and not EOF(f1) then
begin
WriteLn('Первый файл длинее второго!');
Break;
end;
if EOF(f1) and EOF(f2) then
Break;
end;
Close(f1);
Close(f2);
End;
Procedure Dircmp(cnp: string);
type
FileList = array [1..500] of string[12];
var
f1, f2: FileList;
Flag, w, p, d, s: boolean;
i, j, n1, n2, k, n, pos1, cod: integer;
dir1, dir2, keys: DirStr;
st: string;
Procedure Scan(dir: DirStr; var f: FileList; var n: integer);
var
Info: SearchRec;
begin
if dir[Length(dir)] = '\' then
dir := dir + '*.*'
else
dir := dir + '\*.*';
FindFirst(dir, $3F, Info);
if DosError <> 0 then
begin
WriteLn('Ошибка при задании каталога ', dir);
n := - 1;
Exit;
end;
n := 0;
if Info.Name = '.' then
FindNext(Info);
repeat
if (DosError = 0) and (Info.Name <> '..') then
begin
if Info.Attr <> $10 then
begin
Inc(n);
f[n] := Info.Name;
end;
end;
FindNext(Info);
until DosError <> 0;
end;
begin
if Pos(' ', cnp) = 0 then
begin
WriteLn('Необходимо задать параметры!');
Exit;
end;
Delete(cnp, 1, 7);
n := 72;
keys := '';
if Pos('-', cnp) <> 0 then
begin
if Pos(' ', cnp) = 0 then
pos1 := Length(cnp)
else
pos1 := Pos(' ', cnp);
keys := Copy(cnp, 1, pos1);
Delete(keys, 1, 1);
Delete(cnp, 1, pos1);
end;
if Pos('d', keys) <> 0 then
begin
d := True;
Delete(keys, Pos('d', keys), 1);
end
else
d := False;
if Pos('s', keys) <> 0 then
begin
s := True;
Delete(keys, Pos('s', keys), 1);
end
else
s := False;
if Pos('w', keys) <> 0 then
begin
w := True;
Delete(keys, Pos('w', keys), 1);
while Pos(' ', keys) <> 0 do
Delete(keys, Pos(' ', keys), 1);
Val(keys, n, cod);
if cod <> 0 then
begin
WriteLn('Ошибка при задании длины строки!');
Exit;
end;
end
else
w := False;
dir1 := Copy(cnp, 1, Pos(' ', cnp) - 1);
Delete(cnp, 1, Pos(' ', cnp));
dir2 := cnp;
Scan(dir1, f1, n1);
if n1 = - 1 then
Exit;
Scan(dir2, f2, n2);
if n2 = - 1 then
Exit;
k := 0;
WriteLn(s_or_f, 'Файлы из первого каталога.');
for i := 1 to n1 do
begin
cod := 0;
for j := 1 to n2 do
if f1[i] = f2[j] then
cod := 1;
if cod = 0 then
begin
Inc(k);
WriteLn(s_or_f, f1[i]);
end;
end;
WriteLn(s_or_f, 'Файлы из второго каталога.');
for j := 1 to n2 do
begin
cod := 0;
for i := 1 to n1 do
if f2[j] = f1[i] then
cod := 1;
if cod = 0 then
begin
Inc(k);
WriteLn(s_or_f, f2[j]);
end;
end;
if s then
Exit;
WriteLn(s_or_f, 'Файлы общие для двух каталогов.');
for j := 1 to n2 do
begin
cod := 0;
for i := 1 to n1 do
if f2[j] = f1[i] then
cod := 1;
if cod = 1 then
begin
Inc(k);
WriteLn(s_or_f, f2[j]);
if d then
begin
st := dir1;
if st[Length(st)] = '\' then
st := st + f2[j]
else
st := st + '\' + f2[j];
st := st + ' ' + dir2;
if st[Length(st)] = '\' then
st := st + f2[j]
else
st := st + '\' + f2[j];
Diff(st);
end;
end;
end;
end;
Procedure Tr(comu: string);
var
p1, p2, s, s1: string;
k: integer;
begin
if Error(comu) then exit;
Delete(comu, 1, 3);
if Pos(' ', comu) = 0 then
begin
WriteLn('Недостаточно параметров!');
exit;
end;
p1 := Copy(comu, 1, Pos(' ', comu) - 1);
Delete(comu, 1, Pos(' ', comu));
p2 := comu; ReadLn(s);
while Pos(p1, s) <> 0 do
begin
k := Pos(p1, s); Delete(s, k, length(p1));
insert(p2, s, k);
end;
WriteLn(s_or_f, s);
end;
Procedure Comm(comu:string);
var
fname1, fname2, f: string[80];
f1, f2: text;
s1, s2: string;
par: string[10];
r1, r2, i: integer;
b, v1, v2, v3: boolean;
begin
if Pos(' ', comu) = 0 then
begin
WriteLn('Не указаны параметры команды!');
Exit;
end;
Delete(comu, 1, 5);
if Pos(' ', comu) = 0 then
begin
WriteLn('Недостаточно параметров!');
Exit;
end;
par := '';
if Pos('-', comu) <> 0 then
begin
par := Copy(comu, 2, Pos(' ', comu) - 2);
Delete(comu, 1, Pos(' ', comu));
end;
fname1 := Copy(comu, 1, Pos(' ', comu) - 1);
Delete(comu, 1, Pos(' ', comu));
fname2 := comu;
if fname1 = fname2 then
begin
WriteLn('Одинаковые имена файлов!');
Exit;
end;
{$I-}
Assign (f1, fname1); Reset (f1);
if IOResult <> 0 then
begin
Writeln ('Файл ', fname1, ' не найден!');
Exit;
end;
Assign (f2, fname2); Reset (f2);
{$I+}
if IOResult <> 0 then
begin
Writeln ('Файл ', fname2, ' не найден!');
Exit;
end;
r1 := 0; r2 := 0;
v1 := True;
v2 := True;
v3 := True;
if par = '1' then
v1 := False;
if par = '2' then
v2 := False;
if par = '3' then
v3 := False;
if par = '12' then
begin
v1 := False;
v2 := False;
end;
if par = '13' then
begin
v1 := False;
v3 := False;
end;
if par = '23' then
begin
v2 := False;
v3 := False;
end;
while True do
begin
Reset(f1);
for i := 1 to r1 do
ReadLn(f1, s1);
Inc(r1);
ReadLn(f1, s1);
Reset(f2);
b := False;
while not EOF(f2) do
begin
ReadLn(f2, s2);
if s1 = s2 then
begin
if v3 then
WriteLn(s_or_f, ' ', s1);
b := True;
Break;
end;
end;
if not b and v1 then
WriteLn(s_or_f, s1);
Reset(f2);
for i := 1 to r2 do
ReadLn(f2, s2);
Inc(r2);
ReadLn(f2, s2);
if EOF(f1) and EOF(f2) then
r1 := - 1;
Reset(f1);
b := False;
while not EOF(f1) do
begin
ReadLn(f1, s1);
if s1 = s2 then
begin
b := True;
Break;
end;
end;
if not b and v2 then
WriteLn(s_or_f, ' ', s2);
if (r1 = - 1) then
Break;
end;
Close(f1);
Close(f2);
end;
Procedure Rmcat(comu:string);
var
keys, f: string;
p, s: boolean;
n, i: integer;
BEGIN
if Error(comu) then exit;
Delete(comu, 1, 6);
keys := '';
if Pos('-', comu) <> 0 then
begin
keys := Copy(comu, 1, Pos(' ', comu));
Delete(comu, 1, Pos(' ', comu));
end;
if Pos('p', keys) <> 0 then
p := True
else
p := False;
if Pos('s', keys) <> 0 then
s := True
else
s := False;
f := comu;
{$I-} RmDir(f); {$I+}
if IOResult <> 0 then
begin
if not s then
WriteLn('Kаталог не существует или содержит файлы!');
Exit;
end;
WriteLn('Каталог ', f, ' удален.');
if p then
begin
if Pos('\', f) = 0 then
begin
GetDir(0, f);
ChDir('..');
end
else
begin
for i := 1 to Length(f) do
if f[i] = '\' then
n := i;
f[0] := Chr(n - 1);
end;
RmDir(f);
end;
End;
Procedure Cat(comu: string);
var
fname, fname2: string;
b: string;
f: text;
p, Flag: boolean;
k, f2: integer;
begin
if Error(comu) then Exit;
Delete(comu, 1, 4);
f2 := 0;
if Pos(' ', comu) = 0 then
fname := comu
else
begin
f2 := 1;
fname := Copy(comu, 1, Pos(' ', comu) - 1);
fname2 := Copy(comu, Pos(' ', comu) + 1, Length(comu) - Pos(' ', comu));
end;
if (fname = '-') or (fname = '') then
fname := 'con';
repeat
if f2 = 2 then
f2 := 0;
{$I-} Assign(f, fname); Reset(f); {$I+}
if IOResult <> 0 then
begin
WriteLn('Неверное имя файла!');
Exit;
end;
k := 0;
while not EOF(f) do
begin
ReadLn(f, b);
k := k + 1;
WriteLn(s_or_f, b);
end;
Close(f);
if f2 = 1 then
begin
fname := fname2;
f2 := 2;
end;
until f2 = 0;
end;
procedure Mv(comu:string);
{перенос файлов}
const rs = 512;
var
keys, fname1, fname2, f: string;
f1, f2: file;
nr, nw: word;
buf: array [1..rs] of char;
i, r: boolean;
yn: char;
Begin
if error(comu) then exit;
delete(comu, 1, 3);
if error(comu) then exit;
keys := '';
if pos('-', comu) <> 0 then
begin
keys := copy(comu, 1, pos(' ', comu));
delete(comu, 1, pos(' ', comu));
end;
if pos('i', keys) <> 0 then i := true
else i := false;
if pos('f', keys) <> 0 then r := true
else r := false;
fname1 := copy(comu, 1, pos(' ', comu) - 1);
delete(comu, 1, pos(' ', comu));
fname2 := comu;
if fname2[length(fname2)] = '\' then
begin
f := fname1;
while pos('\', f) <> 0 do
delete(f, 1, pos('\', f));
fname2 := fname2 + f;
end;
if fname1 = fname2 then
begin
writeln('Oдинаковые имена файла источника и приемника!');
exit;
end;
{$i-}
assign (f1, fname1); reset (f1, 1);
{$i+}
if ioresult <> 0 then
begin
writeln ('Файл - источник не найден!');
exit;
end;
assign (f2, fname2); {$i-} reset(f2); {$i+}
if (ioresult = 0) and (i or (not r)) then
begin
repeat
write('файл ', fname2, ' уже существует. перезаписать? (y/n) ');
readln(yn);
until upcase(yn) in ['y', 'n'];
if upcase(yn) = 'y' then
rewrite(f2, 1)
else
begin
close(f1); close(f2);
exit;
end;
end
else
rewrite(f2, 1);
repeat
blockread(f1, buf, rs, nr);
blockwrite(f2, buf, nr, nw);
until (nr = 0) or (nw <> nr);
close(f1); close(f2); erase(f1);
writeln ('Файл перенесен!');
End;
Procedure Man (comu:string);
Begin
Delete(comu, 1, 4);
case Unix_num (comu) of
1:begin
WriteLn('Справка по: LS');
WriteLn('Выводит список файлов в каталоге.');
WriteLn('Если каталог не указан, то исп. текущий каталог.');
WriteLn('Вызов:');
WriteLn('ls - 1lRap каталог');
WriteLn('-R - рекурсивный просмотр');
WriteLn('-1 - вывод информации о каждом файле или каталоге с новой строки');
WriteLn('-l - расширенная информация о файлах');
WriteLn('-a - вывод информации о всех файлах и каталогах');
WriteLn('-p - вывод наклонной черты в конце имени каталога');
end;
2:begin
WriteLn('Справка по: DIRCMP');
WriteLn('Сравнение содержимого двух каталогов и');
WriteLn('вывод информации об отличиях.');
WriteLn('Вызов:');
WriteLn('dircmp каталог_1 каталог_2');
end;
3:begin
WriteLn('Справка по: TR');
WriteLn('Выполнение процедуры поиска и замены.');
WriteLn('Вызов:');
WriteLn('tr строка_1 строка_2');
end;
4:begin
WriteLn('Справка по: COMM');
WriteLn('Построчное сравнение содержимого 2-х текстовых файлов.');
WriteLn('Вывод производится в три столбца:');
WriteLn(' строки, содержащиеся в первом файле, ');
WriteLn(' строки, содержащиеся во втором файле, ');
WriteLn(' строки, содержащиеся в обоих файлах.');
WriteLn('Вызов:');
WriteLn('comm - 123 файл_1 файл_2');
WriteLn('-1 - запрет вывода 1-ого столбца');
WriteLn('-2 - запрет вывода 2-ого столбца');
WriteLn('-3 - запрет вывода 3-его столбца');
WriteLn('-12 - вывод только 3-его столбца');
WriteLn('-13 - вывод только 2-ого столбца');
WriteLn('-23 - вывод только 1-ого столбца');
end;
5:begin
WriteLn('Справка по: RMDIR');
WriteLn('Удаление каталога. Удаляемый каталог не должен');
WriteLn('содержать файлов или подкаталогов.');
WriteLn('Вызов:');
WriteLn('rmdir - ps каталог');
WriteLn('-p - удалить указанный каталог и его род. каталог');
WriteLn('-s - запрет вывода сообщений об ошибках');
end;
6:begin
WriteLn('Справка по: CAT');
WriteLn('Вывод содержимого файлов.');
WriteLn('Вызов:');
WriteLn('cat имя_файла');
WriteLn('> - объединить несколько файлов в один, ');
WriteLn('>> - присоединить файл к существующему, ');
WriteLn('-s - запрет вывода пустых строк.');
end;
7:begin
WriteLn('Справка по: MV');
WriteLn('Переименование файла или перемещение одного либо');
WriteLn('нескольких файлов в другой каталог.');
WriteLn('Вызов:');
WriteLn('mv - fi исходный_файл_1 конечный_файл_2');
WriteLn('-f - запрет запроса подтверждений, ');
WriteLn('-i - требование запроса подтверждения.');
end;
8, 10:begin
WriteLn('Описание команд ОС UNIX');
WriteLn('man имя_команды');
WriteLn('Список доступных команд: ');
WriteLn('ls, dircmp, tr, comm, rmdir, cat, mv');
WriteLn('Выход - команда exit');
end;
else WriteLn('Отсутствует описание этой команды.');
end;
End;
BEGIN
WriteLn('-> Эмулятор команд ОС UNIX <-');
Repeat
Write('$ ');
ReadLn(comu);
Spaces(comu);
Reout(comu);
case Unix_num (comu) of
1:Ls(comu);
2:Dircmp(comu);
3:Tr(comu);
4:Comm(comu);
5:Rmcat(comu);
6:Cat(comu);
7:Mv(comu);
8:Man(comu);
9:Break;
else WriteLn('Неизвестная команда!');
end;
Close(s_or_f);
Until False;
END.
Для подготовки данной работы были использованы материалы с сайта http://referat.ru/
ения приложений Примеры ОС, содержащих встроенные средства обеспечения множественных прикладных сред: OS/2 2.x Workplace OS Windows NT PowerOpen некоторые версии UNIX Реализация Windows NT на базе API OS/2 Пример различия в системных вызовах: fork() Наследует адресное пространство родителя Имеет одну нить При завершении потомка нужно послать сигнал ...
... ориентированы на 32 разрядные шинные архитектуры компьютеров с процессорами 80386, 80486 или Pentium. Фирма Novell также подготовила варианты сетевой ОС NetWare, предназначенные для работы под управлением многозадачных, многопользовательских операционных систем OS/2 и UNIX. Версию 3.12 ОС NetWare можно приобрести для 20, 100 или 250 пользователей, а версия 4.0 имеет возможность поддержки до 1000 ...
... ОС для домашнего ПК. Нужно отметить тот факт, то 14 октября 2000 года российское представительство объявило о начале продаж русской версии… На этом завершим рассмотрение систем Windows, предназначенных для «пользовательских» ПК. 4 Windows для серверов и профессиональных рабочих станций 4.1 Windows 3.11 for Workgroups. К 1993 году надежность компьютеров серьезно увеличилось, а ...
... преодолеть присущие архитектуре х86 ограничения (различная длина инструкций). В случае использования инструкций различной длины, чипы 4-го поколения могут одновременно обрабатывать 1 команду, процессоры 5-го поколения (Pentium) - 2 команды. И только микропроцессор AMD5k86 способен обрабатывать до 4 инструкций за такт. Использование раздельного КЭШа инструкций и данных (объем КЭШа инструкций ...
0 комментариев