Запуск и управление приложениями из веб-интерфейса
В данном статье будет рассмотрено, как запускать приложения из веб интерфейса и обмениваться с ними информацией.
Пример рассмотрен для платы mini2440 с установленной linux – Qtopia версии 2.2.0 , которая имеет предустановленный WEB сервер — lighttpd.
Пример содержит следующие файлы:
t2.html и t2.cgi расположенные в папке веб-сервера /www/
plus – исполняемая программа расположена на SD карте /sdcard/
Рассмотрим простой пример – на странички t2.html создаются 2 поля ввода и одна кнопка:
<html> <head> <title>A+B</title> </head> <body> <form method="get" action="t2.cgi" name="A_B"> <p>A=</p> <input TYPE="addr" SIZE="30" id="id2" name="A"/> <p>B=</p> <input TYPE="messag" SIZE="30" id="id2" name="B"/> <br /> <input type="submit" value="A+B" name="submit"/> </form> </body> </html>
Если t2.html переименовать в index.html – то при обращении к IP адресу устройства будет открываться ваша страница.
Вид страницы t2.html
При нажатии на кнопку формируется сообщение:
http://192.168.1.7/t2.cgi?A=2&B=3&submit=A%2BB
В котором указывается: адрес страницы, на которую будет совершён переход и сообщение, передаваемое той страницы. Сообщение в общем виде имеет следующий вид:
name=value&name=value&name=value
В примере оно выглядит следующем образом:
A=2&B=3&submit=A%2BB
Исполняемый файл скрипта — t2.cgi
#!/bin/sh echo "Content-type: text/html; charset=windows-1251" echo echo "<html><head><title>A+B=</title></head><body>" echo "QUERY_STRING=<br />" echo $QUERY_STRING echo "<br /><br />" A=`echo "$QUERY_STRING" | sed -n 's/^.*A=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` B=`echo "$QUERY_STRING" | sed -n 's/^.*B=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` echo "A= $A<br />" echo "B= $B<br />" echo "<br />" if [ $A ] && [ $B ] then /sdcard/plus $A $B else echo "<b><p>Ответ:<br />Не заданы A и B!</p></b>" fi echo "</body></html>" exit 0
Рассмотрим данный файл поподробнее:
#!/bin/sh – указывается, с помощью чего будет происходить обработка скрипта
Файлы *.cgi могут быть написаны на любом языке, если только он установлен (например: /usr/bin/perl).
Далее с помощью сообщений echo начинает формироваться страница, которая будет отображаться при исполнении скрипта.
$QUERY_STRING – передаваемое сообщение скрипту.
A=`echo «$QUERY_STRING» | sed -n ‘s/^.*A=\([^&]*\).*$/\1/p’ | sed «s/%20/ /g»`
По средством такой строки, можно из сообщения — $QUERY_STRING получить значения передаваемых параметров. Данная строчка присваивает переменной A значение переданного параметра A.
if [ $A ] && [ $B ] then … else … fi
Проверка условия. В этом примере проверяется, что бы переменные A и B были не пусты.
Доступ к приложения и другим файлам осуществляется прямым указанием имени файла или команды. В примере запускается простая программа сложения двух чисел, числа передаются в виде двух параметров
/sdcard/plus $A $B
Что бы скрипт мог исполняться – нужно дать ему соответствующие права chmod +x t2.cgi
Программа сложения двух чисел:
#include #includeint main(int argc, char **argv) { int A,B; sscanf(argv[1], "%d", &A); sscanf(argv[2], "%d", &B); printf("A+B = %d",A+B); return(0); }
Программа принимает два параметра и присваивает их переменным A и B, далее выводит их сумму стандартными средствами ввода-вывода.
Выводимые программой сообщения будут восприниматься как часть html странице, поэтому не стоит забывать использовать теги (например тег перевода строки <br>).
Результат
При написание статьи использовались материалы следующих сайтов:
Alex_EXE | 23.07.2010 | Friendly ARM |