русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Интерфейсы подключения периферийных устройств


Дата добавления: 2013-12-23; просмотров: 1322; Нарушение авторских прав


Кнопка отмены: TYPE=reset

Кнопка ввода: TYPE=submit

Это и есть та самая кнопка, которая производит выбор.
<INPUT TYPE=submit VALUE=" Ввод данных ">
Эта команда отображается следующим образом:

 

 

 

Кнопка выполняет инициализацию начальными значениями всех полей.
<INPUT TYPE=reset VALUE="Очистить поля">
Эта команда отображается следующим образом:

 

 

 

3. Выполнение программы (CGI-сценария) можно условно разделить на пять этапов.

1. Запуск программы.

2. Инициализация и чтение выходных данных.

3. Обработка данных.

4. Вывод результатов выполнения.

5. Завершение программы.

Различия между CGI-сценарием и консольным приложением касаются первого, второго и четвертого этапов выполнения.

В подавляющем большинстве случаев запуск CGI-сценария осуществляется щелчком на кнопке Submit Query, сформированной с помощью дескриптора <INPUT TYPE="SUBMIT">, который находится на HTML-странице между <FORM> и </FORM>. Значением атрибута ACTION дескриптора <FORM> является URL файла, содержащего код CGI-сценария. Так, приведенное ниже выражение означает, что файл с кодом CGI-сценария находится на сервере www.geo.sci.com в каталоге cgi-bin в файле script.pl.

<FORM ACTION="http://www.geo.sci.com/cgi-bin/script.pl" METHOD="POST">

Web-сервер различает, что надо сде­лать с файлом, на который указывает URL, — передать его содержимое клиенту или запустить файл на выполнение следующим образом:

1. При установке Web-сервера один из ка­талогов специально выделяется для хранения сценариев. Обычно такой каталог получает имя cgi-bin. В этом случае, если клиент запрашивает файл из каталога cgi-bin, сервер воспринимает такой запрос как команду на запуск сценария. Файлы из других каталогов интерпретируются как HTML-документы.



2. Используется расширение файла. При настройке сервера указывает­ся, что файлы с определенными расширениями содержат коды сценариев. В сис­теме UNIX понятие расширения отсутствует, поэтому для идентификации CGI-сценария служат символы, следующие за последней точкой в имени файла.

Идентификация по расширению используется относительно редко. Чаще всего все сценарии помещаются в /cgi-bin, /scripts или в другой каталог, специально выде­ленный для их хранения.

 

4. Для вывода результатов выполнения CGI-сценария (шаг 3 рис.1) достаточно вывести их в стан­дартный выходной поток. Однако, разрабатывая CGI-сценарий, не забывайте о том, что он все же отличается от консольной программы и имеет следующие особенности.

1. Информация, передаваемая клиенту, должна соответствовать протоколу HTTP, т.е. состоять из заголовка и тела ответа. Как правило, получив данные от сце­нария, сервер самостоятельно добавляет первую строку заголовка.

НТТР/1.0 200 ОК

Формирование информационных полей, входящих в состав заголовка, — задача сценария. Чтобы данные, переданные сценарием, были правильно интерпретированы клиентом, необходимо, чтобы в заголовке присутствовало как минимум поле Content-type. За заголовком должна следовать пустая строка. При отсутствии полей заголовка реакция броузера будет непредсказуемой. В подобных случаях броузер обычно пытается отобразить полученную информацию как текстовый файл.

2.. Самый естественный формат для броузера — формат HTML. Результаты работы сценария обычно оформляются в виде Web-страницы, т.е. возвращаемые дан­ные следует дополнить дескрипторами HTML. Таким образом, ответ CGI-сценария клиенту обычно выглядит так:

Content-type: text/html

 

<HTML>

<НЕАD><Т1ТLЕ>Ответ сценария</ТIТLЕ></НЕАD>

<BODY>

Обратите внимание на пустую строку после выражения Content-type: text/html. Она обязательно должна присутствовать в ответе, в противном случае клиент воспри­мет все последующие данные как продолжение заголовка.

 

5. Передача параметров

Если сценарий вызывается из формы, ему передаются те данные, которые пользо­ватель ввел с помощью интерактивных элементов, отображаемых на Web-странице. Передача информации CGI-сценарию осуществляется в два этапа: сначала броузер передает данные Web-серверу (шаг 1, рис. 1), затем Web-сервер передает их сценарию (шаг 2)

Из имен элементов и их значений формируется строка параметров, которая имеет следующий формат,

Имя1=значение1&имя2=значение2...&имяn=значениеn

Каждый параметр представляет собой имя управляющею элемента и его значение, разделенные знаком равенства, а несколько таких пар объединяются н строку с помощью символа "&". Управляющие символы (“&”, …) кодируются последовательностью из знака процента ("%"), за которым следуют две шестнадцатеричных цифры, представ­ляющие код символа. Так, например, последовательностью "%21" кодируется воскли­цательный знак ("!"), "%3C" — символ "<" и т.д. Как правило, при передаче парамет­ров трехсимвольными последовательностями заменяются все знаки, кроме латинских букв, цифр и символа пробела (последний заменяется знаком "+").

Таким образом, перед использованием строки параметров ее надо декодировать. Алгоритм декодирования чрезвычайно прост и включает в себя следующие действия.

· Выделить из строки параметров пары имя=значение.

· Выделить из каждой пары имя и значение.

· В каждом имени и каждом значени заменить символы "+" пробелами.

· Каждую последовательность из символа "%" и двух шестнадцатеричных цифр преобразовать в ASCII-символ.

Ат­рибут METHOD дескриптора <FORM> имеет либо значение "GET", либо значение "POST". Зна­чения "GET" и "POST" определяют два различных метода передачи параметров сценарию.

· Если атрибут METHOD имеет значение "GET", строка параметров передается вместе с URL вызываемого сценария. Разделителем между URL и строкой параметров является символ "?".

· Если атрибут METHOD имеет значение "POST", строка параметров передается в те­ле HTTP-запроса.

 

6. Анализ строки параметров (шаг 2, рис.1)

 

Если атрибут METHOD дескриптора <FORM> имел значение "GET", строка параметров передается серверу в качестве значения переменной окружения QUERY_STRING.

Для языка С для получения указателя на строку параметров надо использовать функцию getenv().

s = getenv("QUERY_STRING");

При использовании метода POST данные доставляются сценарию по-другому. Они передаются через стандартный поток ввода (STDIN). Чтобы сценарий мог определить, сколько символов следует читать из стандартного ввода, Web-сервер устанавливает значение переменной окружения CONTENT_LENGTH равным длине строки параметров.

Получив управление, сценарий в первую очередь должен выяснить, с помощью какого метода выполнялась передача параметров. Эта информация содержится в пе­ременной окружения REQUEST_METHOD.

Итак, в простейшем случае, чтобы выполнить обработку строки параметров, доста­точно знать назначение трех переменных окружения: REQUEST_METHOD, QUERY_STRING и CONTENT_LENGTH.

Пример 1. Программа на языке С, которая возвращает клиенту приветствие:

 

#include <stdio.h>

int main()
{
printf("Content-Type: text/html\n\n");
printf("<h1>Приветствие!</h1>\n");
}

 

Пример 2. Программа на языке С, которая возвращает клиенту значения переменных окружения ОС (метод “GET”).

 

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>

 

int main()

{

printf("Content-Type: text/html\n\n");

 

printf( "<HTML><HEAD><TITLE>Environment</TITLE></HEAD>\n");

printf( "<BODY>\n");

printf( "Your request is: %s<BR><br>\n",getenv("REQUEST_STRING"));

printf( "Variables:<BR>\n");

printf( "<I><B>REQUEST_METHOD</B></I>=%s<br>\n",getenv("REQUEST_METHOD"));

printf( "<I><B>QUERY_STRING</B></I>=%s<br>\n",getenv("QUERY_STRING"));

printf( "<I><B>CONTENT_LENGTH</B></I>=%s<br>\n",getenv("CONTENT_LENGTH"));

printf( "<I><B>CONTENT_TYPE</B></I>=%s<br>\n",getenv("CONTENT_TYPE"));

printf( "<I><B>GATEWAY_INTERFACE</B></I>=%s<br>\n",getenv("GATEWAY_INTERFACE"));

printf( "<I><B>REMOTE_ADDR</B></I>=%s<br>\n",getenv("REMOTE_ADDR"));

printf( "<I><B>REMOTE_HOST</B></I>=%s<br>\n",getenv("REMOTE_HOST"));

printf( "<I><B>SCRIPT_NAME</B></I>=%s<br>\n",getenv("SCRIPT_NAME"));

printf( "<I><B>SCRIPT_FILENAME</B></I>=%s<br>\n",getenv("SCRIPT_FILENAME"));

printf( "<I><B>SERVER_NAME</B></I>=%s<br>\n",getenv("SERVER_NAME"));

printf( "<I><B>SERVER_PORT</B></I>=%s<br>\n",getenv("SERVER_PORT"));

printf( "<I><B>SERVER_PROTOCOL</B></I>=%s<br>\n",getenv("SERVER_PROTOCOL"));

printf( "<I><B>SERVER_SOFTWARE</B></I>=%s<br>\n",getenv("SERVER_SOFTWARE"));

printf( "<I><B>HTTP_ACCEPT</B></I>=%s<br>\n",getenv("HTTP_ACCEPT"));

printf( "<I><B>HTTP_USER_AGENT</B></I>=%s<br>\n",getenv("HTTP_USER_AGENT"));

printf( "</BODY></HTML>\n");

}

 

Пример 3. Программа на языке С, которая читает данные из стандартного входного потока (метод “POST”).

 

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>

#include <string.h>

 

int main()

{

char *s=getenv("REQUEST_METHOD");

char *endptr;

unsigned int contentlength;

char buff[10000];

const char *len1 = getenv("CONTENT_LENGTH");

 

if(s!=NULL)

{

if(strcmp(s,"GET")==0)

{

strcpy(buff,getenv("QUERY_STRING"));

}else

if(strcmp(s,"POST")==0)

{

contentlength=strtol(len1, &endptr, 10);

fread(buff, contentlength, 1, stdin);

}

.

.

.

Обработка Buff и возвращение результатов клиенту

.

.

.

}

return 0;

}

Большинство периферийных устройств подключаются через промежуточные периферийные интерфейсы, находящиеся на нижних уровнях иерархии подключений (на верхнем уровне — системная шина). Периферийные интерфейсы — самые разнообразные из всех аппаратных интерфейсов. К периферии, подключаемой через промежуточные интерфейсы, относятся большинство устройств хранения (дисковые, ленточные), устройств ввода-вывода (дисплеи, клавиатуры, мыши, принтеры, плоттеры), ряд коммуникационных устройств (внешние модемы). По назначению периферийные интерфейсы можно разделить на специализированные и универсальные, выделенные и разделяемые:

* Специализированные интерфейсы ориентированы на подключение устройств определенного узкого класса, и в них используются сугубо специфические протоколы передачи информации. Примеры — популярнейший интерфейс мониторов VGA, интерфейс накопителя на гибких дисках, традиционные интерфейсы клавиатуры и мыши, IDE/ATA и ряд других.

* Универсальные интерфейсы имеют более широкое назначение, их протоколы обеспечивают доставку данных, не привязываясь к специфике передаваемой информации. Примеры — коммуникационные порты (СОМ), интерфейс SCSI, шины USB и FireWire.

* Выделенные интерфейсы позволяют подключить к одному порту (точке подключения) адаптера (контроллера) лишь одно устройство; число подключаемых устройств ограничено числом портов. Примеры — СОМ-порт, интерфейс VGA-монитора, порт AGP, интерфейс Serial SCSI.

* Разделяемые интерфейсы позволяют подключить к одному порту адаптера множество устройств. Варианты физического подключения разнообразны:

шина (жесткая, как ISA или PCI; кабельная шина SCSI и IDE/ATA), цепочка (daisy chain) устройств (SCSI, IEEE 1284.3), логическая шина на хабах (USB) или встроенных повторителях (IEEE 1394 FireWire).



<== предыдущая лекция | следующая лекция ==>
Меню: SELECT | Параллельные и последовательные интерфейсы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.