这里以嵌入式Linux为例说一下,
调用流程是这样子的:
网页(HTML)-->HTTP做事器-->CGI-->Linux用户态程序(或许不须要)-->驱动程序-->硬件。
1、网页,这个就没什么好说的了,标准的前端,带上js、css效果可能会更好。
2、HTTP做事器,一样平常情形下,嵌入式Linux会利用busybox制作根文件系统,利用httpd命令即可启动一个HTTP做事器,命令大概这样用:httpd -h /var/www/ -p 80
阐明一下,-h后面跟的是开拓板上放置网页的根目录,里面有index.html、cgi程序什么的;-p后面跟的是端口号,HTTP默认利用80端口。
3、CGI是前后端连接的桥梁,可以利用C措辞、Shell脚本、php、python等任何可以制作出来可实行程序的措辞来编写。CGI是这里的重头戏,但是很大略,一会放在后面说。
4、Linux用户太程序,这东西紧张是CGI与驱动沟通的浸染,如果CGI可以直接跟驱动沟通了,就不须要这段程序了。
5、驱动程序,没有这东西,硬件基本上是不会听话的,这个现在不说,往后有韶光了可能会出一系列的教程。
好了,现在把CGI给揪出来,我们以shell脚本为例,其他措辞请类比一下:
HTTP要求分为GET和POST两种,当利用GET办法的时候,比如浏览器这么调用:
http://192.168.1.11/cgi-bin/test.sh?name=xxx
(注:开拓板ip为192.168.1.11,CGI脚本路径为/var/www/cgi-bin/test.sh,GET参数为name=xxx)
那么,在test.sh脚本中,可以在环境变量QUERY_STRING中读取到参数内容;
举个例子,以下CGI的功能是将参数回显到网页上:
#! /bin/shecho \"大众Content-type: text/html\公众echo \公众\"大众echo \"大众<html>\"大众echo \公众<head><title>test</title><meta charset=\\公众utf-8\\"大众><meta http-equiv=\\"大众refresh\\"大众 content=\\公众3\\"大众></head>\"大众echo \"大众<body bgcolor=\\公众rgb(ff,ff,ff)\\公众>\"大众echo \公众$QUERY_STRING\公众 #这里输出HTTP GET传入的参数到网页echo \"大众</body>\"大众echo \公众</html>\"大众
事理是这样的:
将符合HTML语法的内容直接向“标准输出设备”打印出来就可以到前端了,其他措辞实现CGI也是如此。
假设要掌握硬件,比如重启,那么可以在test.sh脚本中的末了(任意位置都行)调用reboot命令即可。
如果是HTTP POST办法,那么CGI只须要读取“标准输入”即可获取POST过来的数据,shell脚本用read,C程序可以用scanf、getline、read等函数。
至于怎么去掌握硬件,就看前端以及CGI解析出来参数之后要怎么玩了。