Главная » Просмотр файлов » И.А. Волкова, И.Г. Головин, М.Г. Мальковский - Модельный SQL-интерпретатор

И.А. Волкова, И.Г. Головин, М.Г. Мальковский - Модельный SQL-интерпретатор (1119418)

Файл №1119418 И.А. Волкова, И.Г. Головин, М.Г. Мальковский - Модельный SQL-интерпретатор (И.А. Волкова, И.Г. Головин, М.Г. Мальковский - Модельный SQL-интерпретатор)И.А. Волкова, И.Г. Головин, М.Г. Мальковский - Модельный SQL-интерпретатор (1119418)2019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Московский государственный

университет им.М.В.Ломоносова

Факультет вычислительной математики и кибернетики

Волкова И.А., Головин И.Г., Мальковский М.Г.

Модельный SQL-интерпретатор

(Издание второе, исправленное)

1999

УДК 519.6+681.3.06

В данном методическом пособии описывается задание практикума на ЭВМ для студентов 2 курса факультета вычислительной математики и кибернетики в поддержку основного курса “Системное программное обеспечение“. Приводятся подробные методические пояснения и рекомендации. Во втором издании частично изменена постановка задачи и исправлены замеченные неточности.

Составители пособия благодарят Богачева Д.А. за предоставленные материалы и Родина В.И. за ценные советы и замечания.

Рецензенты:

проф. Жоголев Е.А.

доц. Корухова Л.С.

Волкова И.А., Головин И.Г., Мальковкий М.Г. “Модельный SQL-интерпретатор (Методическое пособие ) ” - издание второе, исправленное.

Издательский отдел факультета ВМиК МГУ

(лицензия ЛР №040777 от 23.07.96), 1999.-30 с.

Печатается по решению Редакционно-Издательского Совета факультета вычислительной математики и кибернетики МГУ им. М.В.Ломоносова.

ISBN 5-89407-033-3 Издательский отдел факуль-

тета вычислительной математи-ки и кибернетики МГУ им. М.В.Ломоносова, 1999

ПОСТАНОВКА ЗАДАЧИ

Задача реализации модельного SQL-интерпретатора разбивается на следующие подзадачи:

1. Реализация архитектуры “Клиент - Сервер”.

2. Реализация SQL-интерпретатора.

3. Реализация модельного SQL-сервера на базе разработанного интерпретатора и библиотеки функций для работы с файлами данных.

4. Реализация интерфейса пользователя с модельным SQL-сервером.

5. Реализация модельной базы данных, демонстрирующей работоспо-собность разработанной программы.

Архитектура “Клиент-Сервер” предполагает наличие одного или нескольких (в зависимости от варианта задания) процессов-клиентов, принимающих запрос к реляционной базе данных, записанный на модельном SQL. Клиентский процесс передает запрос процессу-серверу, который осуществляет поиск в базе данных в соответствии с запросом и передает результат поиска клиенту.

SQL-интерпретатор реализует некоторое подмножество предложений языка SQL, называемое далее модельным SQL. Описание модельного SQL см.ниже в разделе “Методические указания”. Синтаксический анализ SQL-предложений рекомендуется проводить методом рекурсивного спуска [4]. Интерпретацию SQL-предложений необходимо реализовать с помощью библиотеки для работы с файлами данных, описание которой приведено в п. 2.

Интерфейс пользователя должен давать возможность вводить и редактировать SQL-запросы и просматривать их результаты в табличном виде. Конкретные детали интерфейса оставляются на усмотрение преподавателя.

ВАРИАНТЫ ЗАДАНИЯ

I. Архитектура “Клиент - Сервер”.

1. Один клиент. Клиент и сервер на одной ЭВМ.

2. Один клиент. Клиент и сервер в сети ЭВМ.

3. Несколько клиентов. Клиенты и сервер на одной ЭВМ.

4. Несколько клиентов. Клиенты и сервер в сети ЭВМ.

II. Функции и способ взаимодействия клиента и сервера.

1. Клиент получает от пользователя запрос на модельном SQL, не анализируя его, передает серверу. Сервер анализирует запрос и в случае его корректности выполняет запрос и передает клиенту ответ. Если же запрос некорректен, сервер передает клиенту соответствующий код ошибки. Клиент выдает пользователю либо ответ на его запрос, либо сообщение об ошибке в каком-либо удобном виде.

2. Клиент получает от пользователя запрос на SQL, анализирует его и в случае ошибки сообщает об этом пользователю, иначе передает серверу запрос в некотором внутреннем представлении. Сервер обращается к БД, определяет ответ на запрос и передает его клиенту. Клиент выдает пользователю ответ сервера в каком-либо удобном виде.

СОДЕРЖАНИЕ ОТЧЕТА

1. Постановка задачи (конкретный вариант).

2. Описание способа взаимодействия процесса-клиента и процесса-сервера.

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

4. Листинг основных программ и структур на языке С (по просьбе преподавателя).

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

1. Моделирование архитектуры “Клиент-Сервер”.

Межпроцессное взаимодействие можно организовать, используя модель “Клиент - Сервер”. В этой модели один процесс, называемый сервером, отвечает за обработку запросов, получаемых им от других процессов - клиентов. Таким образом, клиент-серверная архитектура тесно связана с механизмами межпроцессного взаимодействия. Традиционный механизм программных каналов (pipe) не подходит для клиент-серверных приложений, так как каналы могут связывать только процессы, запущенные одним пользователем. Кроме того, клиентские и серверные процессы могут выполняться на разных компьютерах ( и даже в разных операционных системах ), что предъявляет особые требования к механизму межпроцессной связи. Таким требованиям удовлетворяет механизм сокетов, кратко описываемый ниже.

Обычно, когда вызывается программа сервер, она запрашивает у операционной системы сокет (socket) (средство для соединения, связи процессов). Когда сервер получает сокет, он связывает с ним некоторое стандартное имя, чтобы программы-клиенты могли общаться с сервером через данный сокет по этому имени.

После присваивания имени сокету, сервер “слушает” на этом сокете требования связи (запросы) от процессов-клиентов. Когда запрос появляется, сервер может допустить или запретить связь клиента с сервером. Если связь допустима, ОС соединяет клиента с сервером, и сервер получает возможность получать сообщения от клиента и посылать ему ответы аналогично pipe-механизму.

Клиент также запрашивает у ОС свой сокет для взаимодействия с другим процессом (сервером), а затем сообщает имя сокета, с которым он хотел бы связаться. ОС пытается найти сокет c заданным именем и, если находит его, посылает серверу, слушающему этот сокет, запрос связи. Если сервер допускает связь, ОС создает специальный сокет, соединяющий два процесса, и клиент получает возможность посылать и получать данные от сервера аналогично механизму программных каналов.

Средства межпроцессного взаимодействия для одной ЭВМ
(ОС Berkeley UNIX)

Функция socket.

Эта функция используется для создания сокета.

Прототип:

int socket (int domain, int type, int protocol);

Первый параметр - домен - накладывает определенные ограничения на формат используемых процессом адресов и их интерпретацию. При работе с одной ЭВМ используется UNIX-домен, где адреса интерпретируются как имена файлов в UNIX. В этом случае в качестве первого параметра указывается константа AF-UNIX (AF - Address Family).

Второй параметр определяет тип канала связи с сокетом, который должен быть использован.

Существует несколько типов каналов связи с сокетом, доступных при межпроцессном взаимодействии в UNIX, но обычно используются следующие два:

SOCK_STREAM - при этом типе связи поступающим в канал байтам информации гарантируется “доставка” в порядке их поступления; пока непрерывный поток байтов не прекратится, никакие другие данные приниматься каналом не будут (аналогом такой связи является pipe-механизм);

SOCK_DGRAM - этот тип связи используется для посылки отдельных пакетов информации, называемых datagrams; при этом не гарантируется, что пакеты будут доставлены на место назначения в порядке поступления, а в действительности не гарантируется, что они все вообще будут доставлены (пример такого типа связи - обычная почтовая связь).

Третий параметр позволяет программисту выбрать нужный протокол для канала связи. Если этот параметр равен нулю, ОС выберет нужный протокол автоматически.

Функция socket возвращает целое положительное число - номер сокет-дескриптора (который можно использовать, например, в функциях read и write аналогично файловому дескриптору). Если же сокет по каким-либо причинам не был создан (например, очень много открытых файлов), возвращается -1, а в переменную “errno” записывается причина неудачи.

Константы, используемые в качестве аргументов при вызове socket, определены во включаемых файлах sys/socket.h и sys/types.h.

Функция bind.

Эта функция используется сервером для присваивания сокету имени. До выполнения функции bind (т.е. присваивания какого-либо имени, вид которого зависит от адресного домена ) сокет недоступен программам-клиентам.

Прототип:

int bind(int s, char * name, int namelen);

Первый параметр - сокет-дескриптор, который данная функция именует. Второй параметр - указатель на структуру имени сокета, тип которой зависит от домена. Для UNIX-домена этот тип называется sockaddr_un, он определен во включаемом файле sys/un.h и выглядит таким образом:

struct sockaddr_un {

short sun_family;

char sun_path[108];

};

В качестве первого элемента структуры, обозначающего класс адресов, мы будем использовать константу AF_UNIX, второй элемент - имя файла, который будет соответствовать используемому сокету.

Файл c именем, указанным в sun_path, действительно создается, поэтому после окончания работы с данным сокетом надо выполнить функцию unlink, в противном случае другие программы, которые попытаются использовать данное имя, получат сообщение об ошибке.

Функция listen.

Функция listen используется сервером, чтобы информировать ОС, что он ожидает (“слушает”) запросы связи на данном сокете. Без такой функции всякое требование связи с этим сокетом будет отвергнуто.

Прототип:

int listen(int s, int backlog);

Первый аргумент - сокет для прослушивания, второй аргумент (backlog) - целое положительное число, определяющее, как много запросов связи может быть принято на сокет одновременно. В большинстве систем это значение должно быть не больше пяти. Заметим, что это число не имеет отношения к числу соединений, которое может поддерживаться сервером. Аргумент backlog имеет отношение только к числу запросов на соединение, которые приходят одновременно. Число установленных соединений может превышать это число.

Функция accept.

Эта функция используется сервером для принятия связи на сокет. Сокет должен быть уже слушающим в момент вызова функции. Если сервер устанавливает связь с клиентом, то функция accept возвращает новый сокет-дескриптор, через который и происходит общение клиента с сервером. Пока устанавливается связь клиента с сервером, функция accept блокирует другие запросы связи с данным сервером, а после установления связи “прослушивание” запросов возобновляется.

Прототип:

int accept(int s, char * name, int* anamelen);

Первый аргумент функции - сокет-дескриптор для принятия связей от клиентов. Второй аргумент - указатель на адрес клиента (структура sockaddr) для соответствующего домена. Третий аргумент - указатель на целое число - длину структуры адреса. Второй и третий аргументы заполняются соответствующими значениями в момент установления связи клиента с сервером и позволяют серверу точно определить, с каким именно клиентом он общается. Если сервер не интересуется адресом клиента, в качестве второго и третьего аргументов можно задать NULL-указатели.

Функция connect.

Функция connect используется процессом-клиентом для установления связи с сервером.

Прототип:

int connect(int s, char * name, int namelen);

Первый аргумент - сокет-дескриптор клиента. Второй аргумент - указатель на адрес сервера (структура sockaddr) для соответствующего домена. Третий аргумент - целое число - длина структуры адреса.

Функция возвращает 0, если вызов успешный, и -1 иначе.

Функция send.

Функция служит для записи данных в сокет.

Прототип:

int send(int s, char * buf, int len, int flags);

Первый аргумент - сокет-дескриптор, в который записываются данные. Второй и третий аргументы - соответственно, адрес и длина буфера с записываемыми данными. Четвертый параметр - это комбинация битовых флагов, управляющих режимами записи. Если аргумент flags равен нулю, то запись в сокет (и, соответственно, считывание ) происходит в порядке поступления байтов. Если значение flags есть MSG_OOB, то записываемые данные передаются потребителю вне очереди.

Функция возвращает число записанных в сокет байтов ( в нормальном случае должно быть равно значению параметра len ) или -1 в случае ошибки. Отметим, что запись в сокет не означает, что данные приняты на другом конце соединения процессом-потребителем. Для этого процесс-потребитель должен выполнить функцию recv ( см. ниже ). Таким образом, функции чтения и записи в сокет выполняются асинхронно.

Характеристики

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6363
Авторов
на СтудИзбе
310
Средний доход
с одного платного файла
Обучение Подробнее