- •Рекомендации по написанию командных интерпретаторов для ос unix
- •Void c_handl(int num) //обработчик sigchld
- •4. Терминальный ввод/вывод
- •Int cterm, //управляющий терминал
- •5. Запуск внешних программ
- •6. Ожидание завершения фоновых программ
- •7. Анализ статуса (кода) завершения программ
- •8. Управление заданиями
- •Приложения:
- •Задания на курсовую работу по дисциплине "спо"
Задания на курсовую работу по дисциплине "спо"
Группа заданий 1. Разработка собственного упрощенного интерпретатора команд
для ОС UNIX
Общая часть:
Интерпретатор должен правильно запускать на выполнение программы и
командные файлы, написанные на языке других интерпретаторов.
Должна существовать возможность запуска программ в фоновом режиме.
Обязательна также поддержка массива переменных среды и внутренних
переменных (способ их задания зависит от "вида" оболочки - shell-like
or Cshell-like, e.t.c.).
Набор ключей запуска и внутренних переменных зависит от варианта
задания.
Обязательные внутренние переменные: 'path', 'home', 'status'.
Обязательными встроенными командами являются 'cd', 'pwd', 'echo',
'set', 'unset', 'exit'.
Все остальные внутренние команды а также особенности оболочки реализуются
в соответствии с вариантами заданий.
В любом случае при обнаружении ошибки интерпретатор должен выдавать
соответствующее сообщение о ней, предваряя его своим именем для того, чтобы
отличить его (сообщение) от системного.
Должна быть предусмотрена реакция на нажатие клавиш '^C' и '^D'.
Короче говоря, нужно написать работоспособный командный процессор.
Вариант 1
Семейство - sh (имя выполняемого файла выберите самостоятельно).
Встроенные команды (помимо основных): 'alias', 'unalias'.
Дополнительные возможности: обработка файла '.mlogin' при первом запуске.
Аргументы запуска: нет.
Вариант 2
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: полноценное перенаправление ввода-вывода.
Аргументы запуска: нет.
Вариант 3
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: поддержка арифметико-логических операций
(и присваивания) с внутренними переменными.
Аргументы запуска: нет.
Вариант 4
Семейство - sh.
Встроенные команды: полный оператор 'if'.
Дополнительные возможности: выполнение собственных командных файлов.
Аргументы запуска: нет.
Вариант 5
Семейство - csh.
Встроенные команды: 'umask'.
Дополнительные возможности: перенаправление стандартных потоков ввода
и вывода.
Аргументы запуска: нет.
Вариант 6
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: конвейер команд.
Аргументы запуска: нет.
Вариант 7
Семейство - sh.
Встроенные команды: 'notify', 'kill'.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 8
Семейство - csh.
Встроенные команды: 'history'.
Дополнительные возможности: упрощенная поддержка истории команд.
Аргументы запуска: нет.
Вариант 9
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: расширение имен файлов (символы *,?,[]).
Аргументы запуска: нет.
Вариант 10
Семейство - sh.
Встроенные команды: 'jobs', 'stop', 'fg', 'bg'.
Дополнительные возможности: управление процессами.
Аргументы запуска: нет.
Вариант 11
Семейство - csh.
Встроенные команды: 'kill', 'trap'.
Дополнительные возможности: определение реакции на сигналы.
Аргументы запуска: нет.
Вариант 12
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: редактор командной строки с буфером ранее
выполненных команд.
Аргументы запуска: нет.
Вариант 13
Семейство - sh.
Встроенные команды: 'shift'.
Дополнительные возможности: запуск собственных командных файлов с
параметрами, поддержка массивов слов, переменных 'argv', 'argc' и
позиционных ($1, $2 и т. д.).
Аргументы запуска: нет.
Вариант 14
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: замена команды в ` ` на результат ее выполнения
при разборе командной строки.
Аргументы запуска: нет.
Вариант 15
Семейство - csh.
Встроенные команды: 'while'.
Дополнительные возможности: собственные командные файлы с оператором
цикла while.
Аргументы запуска: нет.
Вариант 16
Семейство - sh.
Встроенные команды: 'repeat' (повторять команду N-е число раз).
Дополнительные возможности: нет.
Аргументы запуска: ключ '-c' и следом за ним командная строка для
выполнения.
Вариант 17
Семейство - csh.
Встроенные команды: 'clock off|on'
Дополнительные возможности: часы в верхнем правом углу экрана все
время пока активен shell.
Аргументы запуска: нет.
Вариант 18
Семейство - sh.
Встроенные команды: 'wait' с параметрами.
Дополнительные возможности: нет.
Аргументы запуска: ключ -p <prompt> для определения подсказки.
Вариант 19
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: проверка почты через промежутки времени,
заданные переменной 'ckmail'.
Аргументы запуска: нет.
Вариант 20
Семейство - sh.
Встроенные команды: 'time' (сводка времени, затраченного запущенной программой
или текущим интерпретатором).
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 21
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: управление последовательным выполнением команд
(символы '&& || ; ()' ).
Аргументы запуска: нет.
Вариант 22
Семейство - csh.
Встроенные команды: 'exec', 'nice'.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 23
Семейство - sh.
Встроенные команды: см. доп. возможности.
Дополнительные возможности: Экранный shell типа vsh (см. файл "vsh.1r").
Аргументы запуска: нет.
Вариант 24
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: дополнение имен файлов и каталогов с запросом
при неоднозначности (filename completion).
Аргументы запуска: нет.
Вариант 25
Семейство - csh.
Встроенные команды: просмотр каталогов (должна работать быстрее, чем ls).
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 26
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: линейка задач внизу экрана для переключения
между фоновыми процессами.
Аргументы запуска: нет.
Вариант 27
Семейство - sh.
Встроенные команды: 'read' (считывание значений переменных со стандартного
ввода).
Дополнительные возможности: выполнение собственных командных файлов.
Аргументы запуска: нет.
Вариант 28
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: функции shell (определение и запуск).
Аргументы запуска: нет.
Вариант 29
Семейство - csh.
Встроенные команды: 'prompt <date|time|dir|uname|hostname>'.
Дополнительные возможности: установка подсказки одного из заданных видов.
Аргументы запуска: нет.
Вариант 30
Семейство - sh.
Встроенные команды: 'do - while'.
Дополнительные возможности: запуск собственных командных файлов.
Аргументы запуска: нет.
Вариант 31
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: замена арифметического выражения
в фигурных скобках {} на его результат в командной строке. Как минимум
*,/,%,+,-,sin(),cos().
Аргументы запуска: нет.
Вариант 32
Семейство - sh.
Встроенные команды: 'cat'.
Дополнительные возможности: быстрый и удобный встроенный cat.
Аргументы запуска: ключ для отмены встроенной команды 'cat'.
Вариант 33
Семейство - csh.
Встроенные команды: 'whodo' (пользователи и их процессы; через /proc).
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 34
Семейство - sh.
Встроенные команды: 'date' (удобная в использовании и на русском языке).
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 35
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: поддержка переменных PS1, PS2, SHLVL, PID,
PPID, IFS, UID, EUID, SHVER.
Аргументы запуска: нет.
Вариант 36
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: конвейер команд.
Аргументы запуска: нет.
Вариант 37
Семейство - сsh.
Встроенные команды: 'rm' и 'cp' (возможно, с другими именами).
Дополнительные возможности:
нет.
Аргументы запуска: нет.
Вариант 38
Семейство - сsh.
Встроенные команды: оператор цикла foreach.
Дополнительные возможности: работа с массивами.
Аргументы запуска: нет.
Вариант 39
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: поддержка переменной notify и встроенная
подсказка (help) по возможностям и командам оболочки.
Аргументы запуска: нет.
Вариант 40
Семейство - sh.
Встроенные команды: 'host' (опред. имени по IP-адресу и адреса по имени).
Дополнительные возможности: поддержка переменных SHELL и SHLVL.
Аргументы запуска: нет.
Вариант 41
Семейство - sh.
Встроенные команды: 'cp', 'mv'.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 42
Семейство - sh.
Встроенные команды: 'ps'.
Дополнительные возможности: номер, статус, командная строка и владелец
для каждого процесса.
Аргументы запуска: нет.
Вариант 43
Семейство - csh.
Встроенные команды: 'wc [-lwc]'.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 44
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: дублирование стандартного вывода и вывода ошибок
в указанный файл (вместе и по отдельности).
Аргументы запуска: нет.
Вариант 45
Семейство - sh.
Встроенные команды: рекурсивный 'grep'.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 46
Семейство - sh.
Встроенные команды: 'env'.
Дополнительные возможности: ведение журнала работы через syslog.
Аргументы запуска: нет.
Вариант 47
Семейство - csh.
Встроенные команды: полный оператор if.
Дополнительные возможности: операции опроса свойств файла '-d', '-e','-x','-z'.
Аргументы запуска: нет.
Вариант 48
Семейство - csh.
Встроенные команды: 'chmod', 'chgrp' и 'chown'.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 49
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: модификаторы имен (':h',':t',':r',':e',':a:x'),
приписывание которых к переменной дает возможность выделить путь,
имя, имя без расширения, расширение, начало слова до символа x.
Аргументы запуска: нет.
Вариант 50
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: подстановка значений переменных типа:
$(name:-word)
$(name:=word)
$(name:?word)
$(name+word)
$#name
$(name:offset:length)
(смотри 'man bash'), например,
#set a = "tratata"
#echo $(a:2:3)
результат: rat
Аргументы запуска: '-f имя' - читать и выполнять команды из указанного файла.
Вариант 51
Семейство - sh.
Встроенные команды: оператор 'case ... esac'.
Дополнительные возможности: собственные командные файлы.
Аргументы запуска: нет.
Вариант 52
Семейство - csh.
Встроенные команды: 'printf' 'read' (см. 'man bash').
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 53
Семейство - sh.
Встроенные команды: 'while'.
Дополнительные возможности: замена '~/' в пути на $HOME, собственные
командные файлы.
Аргументы запуска: нет.
Вариант 54
Семейство - csh.
Встроенные команды: 'echoct', 'setct' - команды получения
и изменения текущих настроек терминала (не менее 5 параметров,
см. 'man stty', 'man ioctl').
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 55
Семейство - sh.
Встроенные команды: 'killall' - послать сигнал всем процессам, попадающим
под опред. условие (по командной строке, по пользователю).
Например,
killall -9 -c ba*
- послать 9-й сигнал всем процессам с командной строкой на 'ba'
См. файловую систему /proc
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 56
Семейство - csh.
Встроенные команды: нет.
Дополнительные возможности: встроенный экранный редактор с блоковыми
операциями.
Аргументы запуска: нет.
Вариант 57
Семейство - sh.
Встроенные команды: 'showfs [dev]' - определение типа и параметров файловой
системы на указанном устройстве (не менее 6 типов ФС).
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 58
Семейство - csh.
Встроенные команды: 'file имя' - определение типа файла и типа его содержимого
(не менее 20 типов, например: block special, MS-DOS EXE,
tar archive, Windows DLL, e.t.c.).
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 59
Семейство - сsh.
Встроенные команды: 'dialog' - рисование диалоговых окон, меню,
см. 'man dialog', 'man ncurses'.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 60
Семейство - sh.
Встроенные команды: 'chkholes' - поиск дыр в защите Linux. Команда должна
быть настраиваемая на новые типы дыр - т.е. иметь конфигурационный
файл.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 61
Семейство - sh.
Встроенные команды: нет.
Дополнительные возможности: поддержка арифметико-логических операций
(и присваивания) с внутренними переменными.
Аргументы запуска: нет.
Вариант 62
Семейство - csh.
Встроенные команды: см. доп. возможности.
Дополнительные возможности: простой строковый текстовый редактор (‘см. ed(1)’).
Аргументы запуска: нет.
Вариант 63
Семейство - csh.
Встроенные команды: полный оператор switch.
Дополнительные возможности: выполнение собственных командных файлов.
Аргументы запуска: нет.
Вариант 64
Семейство - sh.
Встроенные команды: ‘login’.
Дополнительные возможности: переменные SHLVL и SID (Session ID).
Аргументы запуска: нет.
Вариант 65
Семейство - csh.
Встроенные команды: ‘at’.
Дополнительные возможности: ‘at’ при первом запуске порождает процесс-демон.
Аргументы запуска: нет.
Вариант 66
Семейство - sh.
Встроенные команды: ‘bind’ – показывает и назначает определенные действия на комбинации клавиш или отдельные клавиши (запуск команд, управление курсором и т. п.)
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 67
Семейство - csh.
Встроенные команды: ‘scanf’ и ‘printf’.
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 68
Семейство - sh.
Встроенные команды: ‘last [name] [tty]’, ‘tty’
Дополнительные возможности: нет.
Аргументы запуска: нет.
Вариант 69
Семейство - csh.
Встроенные команды: ‘lsof [user] [file]’ – выдать список открытых пользователем файлов, или список пользователей, открывших файл.
Дополнительные возможности: нет
Аргументы запуска: нет.
Вариант 70
Семейство - sh.
Встроенные команды: ‘namei’ – показать компоненты пути(см. namei(1))
Дополнительные возможности: при установке переменной ‘more’ весь стандартный вывод происходит постранично.
Аргументы запуска: нет.