Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Моделирование работы интерпретатора SHELLСодержание книги
Поиск на нашем сайте
(программа My_Shell)
Входной язык: подмножество командного языка SHELL (определяется вариантом). Поток команд: 1. командный файл, т.е. каждая строка файла - это отдельная команда, которая должна быть выполнена интерпретатором (имя файла - аргумент в командной строке при вызове интерпретатора); 2. стандартный входной поток команд; 3. для исполнения каждой команды требуется запуск программы My_Shell.
ВНИМАНИЕ!!! "побочный" эффект выполнения уже обработанных команд (например, перенаправление ввода-вывода) не должен влиять на выполнение последующих команд.
Входной язык (варианты): Общая часть (одинаковая для всех вариантов): · # конвейер pr1 | pr2 |... | prN для произвольного N>=2; считать, что аргументов у prI (1 <= I<= N) нет (но возможна реализация с произвольным числом аргументов у каждого процесса)
· # перенаправление ввода-вывода <, >, >> (в том числе для pr1 и prN в конвейере) Например, pr < data > res pr1 | pr2 > res.txt
· # запуск в фоновом режиме & (в том числе и для конвейеров) Например, pr arg1 arg2 & pr1 | pr2 | pr3 > res.all &
Вариантная часть: В каждый вариант входит (как минимум) один из подпунктов каждого пункта, отмеченного римской цифрой. Звездочкой отмечены более сложные подпункты. Части подпунктов, содержащие слово «возможно», могут быть опущены при выборе варианта; их реализация усложняет вариант. Вариант определяет преподаватель.
I. 1. mv old_file new_file 2. cp file copy_file
II. 1. wc filename результат: filename строк слов символов (возможен список имен файлов; в этом случае подобная информация выдаются о каждом файле) 2. grep substring filename результат: строки файла filename, содержащие substring как подстроку (возможен флаг -v; в этом случае результат - это строки, которые не содержат substring как подстроку) 3. cmp filename1 filename2 результат: информация о первом различии в содержимом двух файлов Например, filename1 differs from filename2: line 5 char 36 *4. sort filename сортировка строк файла в соответствии с кодировкой ASCII возможны флаги: -r обратный порядок -f не различать большие и малые буквы -n числовой порядок +n начать сортировку с (n+1)-ой строки
III. 1. cat filenames возможен флаг: -n с нумерацией строк (если файлов несколько, то нумерация сквозная) 2. tail filename вывод 10 последних строк файла возможны флаги:
-n n последних строк +n с n-ой строки и до конца файла 3. od filename вывод содержимого файла по 10 символов в строке с указанием номера первого символа в каждой десятке Например, 000001 a b c d \n e f g h i 000011 j k \t l m n возможен флаг: -b с указанием восьмеричных кодов символов
IV. 1. pr1; pr2;...; prN последовательное выполнение команд prI - как если бы они были переданы интерпретатору по одной команде в строке ВНИМАНИЕ!!! приоритет операции | выше, чем приоритет операции; однако, возможно использование скобок: напрмер, (pr1; pr2) | pr3, что приведет к конкатенации результатов работы pr1 и pr2, которые будут переданы процессу pr3 как входные данные. 2. pr1 && pr2 выполнить pr1; в случае успеха выполнить pr2 3. pr1 || pr2 выполнить pr1; в случае неудачи выполнить pr2
ПРИЛОЖЕНИЯ
Библиотека стандартных функций языка С
Здесь приводится краткое описание некоторых библиотечных функций, утвержденных в качестве ANSI-стандарта языка Cи. Более подробное и полное описание этой библиотеки можно найти в [1] и [2].
Функции работы со строками Эти функции определены в головном файле <string.h>. Если копирование имеет дело с объектами, перекрывающимися по памяти, то поведение функций не определено. Функции сравнения рассматривают аргументы как массивы элементов типа unsigned char.
char *strcpy(char *s, const char *ct) копирует строку ct в строку s, включая ‘\0’; возвращает s.
char *strcat (char *s, const char *ct) приписывает ct к s; возвращает s.
char strcmp(const char *cs, const char *ct) сравнивает cs с ct; возвращает значение меньшее 0, если cs<ct; равное 0, если cs==ct, и большее 0,если cs>ct.
char *strchr(const char *cs, char c) возвращает указатель на первое вхождение c в cs или, если такового не оказалось, NULL.
char *strrchr(const char *cs, char c) возвращает указатель на последнее вхождение c в cs или, если такового не оказалось, NULL.
char *strstr(const char *cs, const char *ct) возвращает указатель на первое вхождение ct в cs или, если такового не оказалось, NULL.
size_t strlen(const char *cs) возвращает длину cs (без учета ‘\0’).
char *strtok(char *s, const char *ct) ищет в s лексему, ограниченную литерами из ct. Последовательные вызовы функции strtok разбивают строку s на лексемы. Ограничителем лексемы может быть любая литера, входящая в строку ct. В первом вызове функции указатель s не равен NULL. Функция находит в строке s первую лексему, состоящую из литер, не входящих в ct; работа этого вызова завершается тем, что поверх следующей литеры пишется ‘\0’ и возвращается указатель на выделенную лексему. Каждый последующий вызов функции strtok, в котором указатель s равен NULL, выдает указатель на следующую лексему, которую функция будет искать сразу за концом предыдущей. Функция возвращает NULL, если далее никакой лексемы не обнаружено. Параметр ct от вызова к вызову может варьироваться.
void *memcpy(void *s, const void *ct, size_t n) копирует n литер из ct в s и возвращает s.
void *memset(void *s, char c, size_t n) размещает литеру c в первых n позициях строки s и возвращает s.
|
||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 364; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.244.240 (0.01 с.) |