源码天堂 点数获取源码解压密码

当前位置:&>&&>&&>& >获取包名和类名功能源码
获取包名和类名功能源码
软件大小:980 KB
源码类型:
源码语言:简体中文
软件等级:
官方网站:
源码演示:
运行环境:/android/ipad
更新时间:
&&温馨提示:本资源由整理提供下载转载时请留下链接说明:获取包名和类名功能源码,这个主要是实现了获得手机中所有包名和类名,分别保存至数据库,文件中并可以显示到屏幕上,获得手机中所有包名和类名,分别保存至数据库,文件中,并且点击button可以显示到屏幕上等。
技术支持:如果遇到技术上的问题可以到我们相关网站进行咨询和解决,,,,,,。
点数不足:& &|& &下载总数:0
Copyright &
Corporation662p开源网版权所有
客户端下载:&&服务热线:400-702-1168 ()
您好,访客
||||||||||
如何获取本地html文件的标题,超级链接_delphi教程
发布时间: 14:30:35&&来源:&&作者:&&点击:569
本文用于提取本地网页的标签元素如&TITLE&&/TITLE&,&IMG&,&A&&/A&...的内容,非常实用于批量文件的操作,这是按一般文件进行文本查找替换无法比拟的,,而这是使用TWEBBROWSER控件无法做到的。类似的,你可以把本地的HTML文件转换成MHT文件(这是个大家觉得很棘手的问题,本人已经搞定)。
//uses activex,mshtml
function Html_GetTitleFromFile(const HtmlFile:TFileNvar FileTitle:String):BvarIdoc&&&& : IHtmlDocument2;//ElementGroup : IhtmlElementC//HtmlItem: IHTMLEPersistFile: IPersistFbeginResult:=Fif not fileexists(HtmlFile) then& FileTitle:=;
& try&&&&&& Idoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;&&&&&& PersistFile := IDoc as IPersistF&&&&&& if PersistFile.Load(StringToOleStr(HTMLFile),1)&&S_OK then&&&&&&&&&&&& IDoc.designMode :=& //This will disable script execution.&&& {&& while IDoc.readyState && complete do& //if it dead here,how to do it?&&&&&& begin&&&&&& application.ProcessM&&&&&&&&& }&&& //&& Showmessage(IDoc.readyState);&&&&&& Application.ProcessM&&&&&& sleep(1000);&&& //&& Showmessage(IDoc.readyState);&&&&&& if IDoc.readyState&&complete then&&&&&& begin&&&&&& Application.ProcessM&&&&&& sleep(1000);&&&&&&&&&&&& if IDoc.readyState&&complete then&&&&&& begin&&&&&& IDoc:=&&&&&& Result:=F&&&&&&&&&&&&&&&&&&& Result:=T&&&&&& FileTitle:=IDoc.&&&&&& {& //This code also works&&&&&& ElementGroup:=IDoc.all.tags(TITLE) As IhtmlElementC&&&&&& HtmlItem:=ElementGroup.item(0,0) As IHtmlE&&&&&& FileTitle:=HtmlItem.innerT&&&&&& }
&& finally&&&&&&& IDoc :=&&
以上内容由
搜集整理,如转载请注明原文出处,并保留这一部分内容。
  “华夏名网”
是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构评价为十大IDC服务商之一。
华夏名网网址导航:
上一篇:下一篇:
(4917次点击) (2769次点击) (4159次点击) (2794次点击) (2374次点击) (3730次点击) (3571次点击) (2360次点击) (2530次点击) (2439次点击)
(3418次点击) (3235次点击) (3246次点击) (3991次点击) (2414次点击) (2323次点击) (3216次点击) (3625次点击) (2356次点击) (2338次点击)
&2002- 飞数科技 版权所有
电话总机:028-91 94
公司地址:四川省成都市青龙街51号倍特康派大厦10楼5号服务热线:400-702-1168 ()
您好,访客
||||||||||
利用WMI获取系统信息
发布时间: 10:46:51&&来源:编程爱好者网站&&作者:编程爱好者网站&&点击:700
&&&&&WMI(Windows Management Instrumentation)技术是微软提供的Windows下的系统管理工具。通过该工具可以在本地或者管理客户端系统中几乎一切的信息。很多专业的网络管理工具都是基于WMI开发的。该工具在Win2000以及WinNT下是标准工具,在WinArrayX下是扩展安装选项。本文将介绍如何通过VB编程来访问WMI对象的编程。
&&&首先来看一个简单的通过WMI获取系统信息的范例,这个范例通过WMI对象获得系统中运行的的进程:
Function Enum1() As String&&&&Dim WMI
&&&&Set WMI = GetObject(&WinMgmts:&)&&&&Set objs = WMI.InstancesOf(&Win32_Process&)&&
&&&&For Each obj In objs&&&&&&&&Enum1 = Enum1 + obj.Description + Chr(13) + Chr(10)&&&&NextEnd Function&&
&&&&在上面的代码中,首先通过&&GetObject(&WinMgmts:&)获得WMI对象,在WMI对象下有很多的子项,在这里我们通过WMI.InstancesOf(&Win32_Process&)获得系统中所有的进程列表子项。
&&&&下面看一个完整的访问WMI对象的范例,这个范例获得计算机的信息。&&&&建立一个新工程,在Form1中添加一个TextBox控件以及一个CommandButton控件,在CommandButton的Click事件中写入以下的代码:
Private Sub Command1_Click()&&&&Dim s, System, item&&&&Dim i As Integer
&&&&Set System = GetObject(&winmgmts:&).InstancesOf(&Win32_ComputerSystem&)&&&&For Each item In System&&&&&&&&’List1.AddItem item.cputype&&&&&&&&s = &Computer Info& & vbCrLf&&&&&&&&s = s & &***********************& & vbCrLf&&&&&&&&s = s & &计算机名称: & & item.name & vbCrLf
&&&&&&&&s = s & &状态: & & item.Status & vbCrLf
&&&&&&&&s = s & &类型: & & item.SystemType & vbCrLf
&&&&&&&&s = s & &生产厂家: & & item.Manufacturer & vbCrLf
&&&&&&&&s = s & &型号: & & item.Model & vbCrLf
&&&&&&&&s = s & &内存: ~& & item.totalPhysicalMemory \ 1024000 & &mb& & vbCrLf
&&&&&&&&s = s & &域: & & item.domain & vbCrLf
&&&&&&&&’s = s & &工作组& & item.Workgroup & vbCrLf ’获得工作组和域的选项不能同时用&&
&&&&&&&&s = s & &当前用户: & & item.username & vbCrLf
&&&&&&&&s = s & &启动状态& & item.BootupState & vbCrLf
&&&&&&&&s = s & &该计算机属于& & item.PrimaryOwnerName & vbCrLf
&&&&&&&&s = s & &系统类型& & item.CreationClassName & vbCrLf
&&&&&&&&s = s & &计算机类类型& & item.Description & vbCrLf
&&&&&&&&For i = 0 To 1&&’这里假设安装了两个系统&&
&&&&&&&&&&&&s = s & Chr(5) & &启动选项& & i & & :& & item.SystemStartupOptions(i) _&&
&&&&&&&&&&&&&&&&& vbCrLf&&
&&&&&&&&Next i&&
&&&&Text1.Text = s&&
&&&&运行程序,点击Command1,在textBox中就可以显示计算机的信息。
&&&&在上面的代码中,程序通过GetObject(&winmgmts:&)获得WMI对象,然后获得下面的
Win32_ComputerSystem子项并通过访问Win32_ComputerSystem对象中的分项获得系统中的信息。
需要说明的是,并不是所有的系统都支持WMI,在有些系统中无法显示生产厂家等信息。
&&&&现在的计算机以及网络组成十分复杂。例如系统硬件方面就有主板、硬盘、网卡... 。
软件方面有操作系统、系统中安装的软件、正在运行的进程等等。网络方面有域、工作组
等等。利用WMI可以访问上面的全部信息,但是如果向上面一样的利用分项来访问的话会很
麻烦。为此,WMI提供了一种类似SQL语句的查询语句,可以通过查询语句获得WMI对象下的子项。
&&&&下面是一个遍历系统中安装的网卡并返回网卡MAC地址的代码:
Private Function MACAddress() As String
&&&Set objs = GetObject(&winmgmts:&).ExecQuery( _
&&&&&&&SELECT MACAddress & & _
&&&&&&&FROM Win32_NetworkAdapter & & _
&&&&&&&WHERE & & _
&&&&&&&((MACAddress Is Not NULL) & & _
&&&&&&&AND (Manufacturer && & & _
&&&&&&&’Microsoft’))&)
&&&For Each obj In objs
&&&&&&MACAddress = obj.MACAddress
&&&&&&Exit For
&&&Next obj
End Function
&&&&上面的代码获得WMI对象,然后运行ExecQuery执行一个WMI查询语句获得安装的网卡并返回
网卡的MAC地址。
&&&&WMI还支持事件处理,让程序可以处理系统事件,例如程序运行、关闭,可移动驱动器的插入、
取出等。下面是一个可以对系统中运行程序进行监控的程序。
&&&&首先建立一个新工程,然后点击菜单的 project | references 项,在references列表中选中
Microsoft WMI Scripting Library将WMI对象库加入工程中。然后在Form1中加入一个ListBox控件,
然后在Form1中加入以下代码:
Option Explicit&&
Dim Locator As SWbemLocator
Dim Services As SWbemServices
Dim WithEvents StatusSink As SWbemSink
Private Sub KillEvents()
&&&&StatusSink.Cancel
&&&&Set StatusSink = Nothing
Private Sub Form_Load()
&&&&Dim Query As String
&&&&Set StatusSink = New SWbemSink
&&&&Set Locator = CreateObject(&WbemScripting.SWbemLocator&)
&&&&Set Services = Locator.ConnectServer()
&&&&Query = &SELECT * FROM __InstanceCreationEvent &
&&&&Query = Query + &WITHIN 1 &
&&&&Query = Query + &WHERE TargetInstance ISA ’Win32_Process’&&&
&&&&Services.ExecNotificationQueryAsync StatusSink, Query
Private Sub StatusSink_OnObjectReady(ByVal StatusEvent As SWbemObject, _
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ByVal EventContext As SWbemNamedValueSet)&&
&&&&Dim arr
&&&&Dim strQue As String
&&&&Dim i As Integer&&
&&&&List1.Clear
&&&&arr = Split(StatusEvent.GetObjectText_, Chr(10))
&&&&For i = LBound(arr) To UBound(arr)
&&&&&&&&List1.AddItem arr(i)
&&&&Next i
Private Sub StatusSink_OnCompleted(ByVal HResult As WbemErrorEnum, _
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ByVal ErrorObject As SWbemObject, _
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ByVal EventContext As SWbemNamedValueSet)&&
&&&&If HResult && wbemErrCallCancelled Then
&&&&&&&&’错误处理
&&&&End If
&&&&在上面的程序中定义了一个SWbemSink对象StatusSink,然后建立一个SWbemServices对象Server,
并将StatusSink连接到Server对象上。这样就可以通过StatusSink监控程序的运行。
&&&&运行程序,然后任意运行一个程序,在Form1的ListBox中就可以列出运行的程序的信息。
&&&&WMI应用最强大的一面是可以通过WEB页面来实现远程管理。下面我们来建立一个HTML页面,该页面
可以实现向上面的VB程序一样动态监控系统中运行的程序。监控系统中程序运行的HTML代码如下:
&object ID=&mysink& CLASSID=
&CLSID:75718CArrayA-F02Array-11d1-A1AC-00C04FB6C223&&&/object&
function window.onload()&&
&&var locator = new ActiveXObject (&WbemScripting.SWbemLocator&);&&
&&var service = locator.ConnectServer();&&
&&szQuery = &SELECT * FROM __InstanceCreationEvent &;&&
&&szQuery += &WITHIN 1 &;&&
&&szQuery += &WHERE TargetInstance ISA ’Win32_Process’&;&&
&&service.ExecNotificationQueryAsync(mysink,szQuery);
&script FOR=&mysink& EVENT=&OnObjectReady(obj, objAsyncContext)&&&&
&&.innerHTML += obj.TargetInstance.Name + &&br&&;&&
&span ID=&info&&&/span&&&
&&&&保存代码为Htm后缀的页面文件。双击打开网页,然后运行一个程序,在网页上就可以列出
运行的程序的文件名。
&&&&以上简要的介绍了一下WMI的应用,实际上WMI对象的操作是十分复杂,功能也是很强大的,例如你可以通过WMI在服务器上监控整个局域网上的计算机、向局域网上的计算机批量安装软件(例如杀毒软件)。通过页面远程访问服务器,控件服务器运行程序,添加用户等。
以上内容由
搜集整理,如转载请注明原文出处,并保留这一部分内容。
  “华夏名网”
是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构评价为十大IDC服务商之一。
华夏名网网址导航:
上一篇:下一篇:
(4915次点击) (2767次点击) (4157次点击) (2792次点击) (2366次点击) (3724次点击) (3565次点击) (2358次点击) (2528次点击) (2437次点击)
(3413次点击) (3231次点击) (3242次点击) (3988次点击) (2404次点击) (2318次点击) (3208次点击) (3615次点击) (2348次点击) (2332次点击)
&2002- 飞数科技 版权所有
电话总机:028-91 94
公司地址:四川省成都市青龙街51号倍特康派大厦10楼5号服务热线:400-702-1168 ()
您好,访客
||||||||||
嵌入式WEB服务器BOA的移植方法
发布时间: 05:11:00&&来源:
ChinaUnix博客  &&作者:
ChinaUnix博客  &&点击:1253
screen.width*0.7) {this.resized= this.width=screen.width*0.7; this.alt=’Click here to open new window\nCTRL+Mouse wheel to zoom in/out’;}" onmouseover="if(this.width>screen.width*0.7) {this.resized= this.width=screen.width*0.7; this.style.cursor=’hand’; this.alt=’Click here to open new window\nCTRL+Mouse wheel to zoom in/out’;}" onclick="if(!this.resized) {} else {window.open(’/fileicon/rar.gif’);}" onmousewheel="return imgzoom(this);" alt="" />
今天自己在开发板上移植了boa服务器。参考资料是李驹光、郑耿大侠在恒颐论坛上的帖子。李大侠写的好,我没有费什么力气就搞定了,:-)。
步骤如下:
http://www.boa.org/
下载Boa源码,将其解压并进入源码目录的src子目录
& & # tar -zxvf boa-0.Array4.13.tar.gz
& & # cd boa-0.Array4.13/src
2.生成Makefile文件
& & # ./configure
修改Makefile文件,
a.找到CC=gcc,将其改成CC = arm-linux-gcc,
b.找到CPP = gcc ?E,将其改成CPP = arm-linux-gcc ?E,
保存退出。
3.运行make进行编译,得到的可执行程序为boa,并将调试信息剥去
& & # make
& & # arm-linux-strip boa
4.编写boa.conf
5.cp boa 到开发板的/bin目录下,在开发板/etc目录下建boa目录,cp boa.conf到板子的/etc/boa目录。
6.创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,创建CGI脚本所在目录/var/www/cgi-bin/,在/var/www中放置一个index.html文件
7.cp mime.types文件到开发板/etc目录
8.vi passwd,添加nouser用户,vi group 添加nogroup组
8.运行boa:
现在通过其他机器就可以访问了。
http://1Array2.168.0.12
就可以访问到你放置的那个index页面了。
Array.编辑helloworld.c程序测试cgi的运行
#arm-linux-gcc -o helloworld.cgi helloworld.c
#cp helloworld.cgi 到开发板的/var/www/cgi-bin目录下
在pc机的浏览器地址栏输入
http://1Array2.168.0.12/cgi-bin/helloworld.cgi
,可以看到相关页面,CGI脚本测试通过。
10.从CGIC的主站点
下载源码,将其解压并进入源码目录
& & # tar -zxvf cgic205.tar.gz
& & # cd cgic205
11.修改Makefile文件
a.找到CC=gcc,将其改成CC=arm-linux-gcc,
b.找到AR=ar,将其改成AR=arm-linux-ar,
c.找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。
e.找到gcc cgictest.o -o cgictest.cgi ${LIBS},
&&将其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},
f.找到gcc capture.o -o capture ${LIBS},
&&将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},
保存退出。
12.然后运行make进行编译,得到的CGIC库libcgic.a,我们通过调试辅助程序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。
13.将capture和cgictest.cgi拷贝到主机的/var/www/cgi-bin目录下。
在工作站的浏览器地址栏输入
http://1Array2.168.0.12/cgi-bin/cgictest.cgi
,可以看到页面,CGIC库和测试脚本都移植成功。
下边是李大侠的大文了。
& &随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。本节主要介绍这种应用的开发和移植工作。
& &用户首先需要在嵌入式设备上成功移植支持脚本或CGI功能的Web服务器,然后才能进行应用程序的开发。
1、嵌入式Web服务器移植&&
& &由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。
& &典型的嵌入式Web服务器有Boa (www.boa.org)和thttpd (/software/thttpd/)等,它们和Apache等高性能的Web服务器主要的区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。
& &我们介绍比较常用的Boa服务器的移植。Boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全,在其站点公布的性能测试中,Boa的性能要好于Apache服务器。
& & 第一步完成Boa程序的移植。从www.boa.org下载Boa源码,当前最新版本为0.Array4.13,将其解压并进入源码目录的src子目录
& & # tar xzf boa-0.Array4.13.tar.gz
& & # cd boa-0.Array4.13/src
生成Makefile文件
& & # ./configure
& & 修改Makefile文件,找到CC=gcc,将其改成CC = arm-linux-gcc,再找到CPP = gcc ?E,将其改成CPP = arm-linux-gcc ?E,并保存退出。
& & 然后运行make进行编译,得到的可执行程序为boa,将调试信息剥去,得到的最后程序只有约60KB大小。
& & # make
& & # arm-linux-strip boa
& &第二步完成Boa的配置,使其能够支持CGI程序的执行。Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改,下面解释一下该文件的含义:
#监听的端口号,缺省都是80,一般无需修改
# bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY,通配于服务器的所有IP地址
#Listen 1Array2.68.0.5
#作为哪个用户运行,即它拥有该用户的权限,一般都是nobody,需
要 /etc/passwd中有nobody用户
User nobody
#作为哪个用户组运行,即它拥有该用户组的权限,一般都是nogroup,需要在/etc/group文件中有nogroup组
Group nogroup
#当服务器发生问题时发送报警的email地址,目前未用,注释掉
#ServerAdmin root@localhost
#错误日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null。在下面设置时,注意一定要建立/var/log/boa目录
ErrorLog /var/log/boa/error_log
#访问日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null或直接注释掉。在下面设置时,注意一定要建立/var/log/boa目录
#AccessLog /var/log/boa/access_log
#是否使用本地时间。如果没有注释掉,则使用本地时间。注释掉则使用UTC时间
#UseLocaltime
#是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录
#VerboseCGILogs
#服务器名字
ServerName
#是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服务器。一般注释掉,即不需要启动
#VirtualHost
#非常重要,HTML文档的主目录。如果没有以/开始,则表示从服务器的根路径开始。
DocumentRoot /var/www
#如果收到一个用户请求的话,在用户主目录后再增加的目录名
UserDir public_html
#HTML目录索引的文件名,也是没有用户只指明访问目录时返回的文件名
DirectoryIndex index.html
#当HTML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生成索引文件然后返回给用户,因为该过程比较慢最好不执行,可以注释掉或者给每个HTML目录加上DirectoryIndex指明的文件
#DirectoryMaker /usr/lib/boa/boa_indexer
#如果DirectoryIndex不存在,并且DirectoryMaker被注释,那么就用Boa自带的索引生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa能读写
# DirectoryCache /var/spool/boa/dircache
#一个连接所允许的HTTP持续作用请求最大数目,注释或设为0都将关闭HTTP持续作用
KeepAliveMax 1000
#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接
KeepAliveTimeout 10
#指明mime.types文件位置。如果没有以/开始,则表示从服务器的根路径开始。可以注释掉避免使用mime.types文件,此时需要用AddType在本文件里指明
MimeTypes /etc/mime.types
#文件扩展名没有或未知的话,使用的缺省MIME类型
DefaultType text/plain
#提供CGI程序的PATH环境变量值
CGIPath /bin:/usr/bin:/usr/local/bin
#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types
#文件,则注释掉,如果不使用mime.types文件,则必须使用
#AddType application/x-httpd-cgi cgi
#指明文档重定向路径
#Redirect /bar http://elsewhere/feh/bar
#为路径加上别名
Alias /doc /usr/doc
#非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点+虚拟路径+CGI脚本名
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
& &用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,不然Boa就不能正常工作。在上面的例子中,我们还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将mime.types文件拷贝到/etc目录,创建CGI脚本所在目录/var/www/cgi-bin/。mime.types文件用来指明不同文件扩展名对应的MIME类型,一般可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。
第三步就是测试Boa能否正常工作,静态HTML页面能否正常访问,CGI脚本能否正常运行,一般采用NFS方式来进行测试工作,可以将嵌入式目标系统上的/etc目录拷贝到主机的NFS共享目录下,然后将NFS共享目录下的etc目录重新NFS mount为目标系统上的/etc目录。这样就可以在主机上对etc目录下的各种配置文件,如进行修改而立刻在目标系统上生效。
&&假设主机/nfs目录为共享目录,在其下面建立一个www子目录作为Web站点的主目录,其内容如下:
# ls /nfs/www
cgi-bin&&images index.html
& &index.html为测试主页面,images为存放各种图片的子目录,cgi-bin为CGI脚本的存放目录。根据示例boa.conf的配置,目前HTML文档的主目录为/var/www,CGI脚本目录为/var/www/cgi-bin,则运行以下命令将主机的/nfs/www目录mount成目标板上的/var/www目录。然后就可以运行boa了:
# mount -t nfs 1Array2.168.0.20:/nfs/www /var/www -o nolock
在工作站上运行浏览器进行测试,在地址栏输入目标系统IP,即
http://1Array2.168.0.162
,可以看到相关页面,表示静态HTML页面测试通过。
& & 接下来进行CGI脚本的测试,我们需要一个测试用的CGI脚本。可以写个最简单的Hello World程序,示例代码如下
void main() {
& & printf(&Content-type: text/html\n\n&) ;
& & printf(&\n&) ;
& & printf(&CGI Output\n&) ;
& & printf(&\n&) ;
& & printf(&Hello, world.\n&) ;
& & printf(&\n&) ;
& & printf(&\n&) ;
& & exit(0) ;
& &然后进行交叉编译,将得到的helloworld.cgi拷贝到主机的/nfs/www/cgi-bin目录下。
#arm-linux-gcc -o helloworld.cgi helloworld.c
#cp helloworld.cgi /nfs/www/cgi-bin
在浏览器地址栏输入http://1Array2.168.67.16/cgi-bin/helloworld.cgi,可以看到相关页面,表示CGI脚本测试通过。
&&现在我们已经可以让Boa在嵌入式目标系统上正常工作了,嵌入式Web服务器移植成功。在以上的移植过程中,最好设定boa.conf中的错误日志文件ErrorLog,允许Boa记录错误信息;测试静态HTML页面和CGI脚本时,不管结果如何,最好都查看错误日志文件;CGI脚本测试很容易发生权限不够的错误,要保证Boa访问的主目录、CGI脚本目录以及临时文件目录(如果没有设置TMP环境变量时,缺省是/tmp目录),都必须能被Boa运行时所代表的用户完全访问,该用户由boa.conf中的User指出。
& &目前Web技术中生成动态Web页面的方法有CGI和服务器脚本,如JSP, ASP等,但后者需要Web服务器具有这些脚本的运行支持模块。在嵌入式Web服务器中,考虑到资源限制问题,一般都只提供CGI支持,因此在嵌入式设备中Web方式应用实际上就是基于CGI的程序开发。
& & CGI(Common Gate Intergace)是一段运行在Web服务器上的程序,提供同客户端Html页面的接口。我们看一个实际例子:常见的个人主页上大都有一个留言本,留言本的工作方式是这样的:先由用户输入一些信息,如名字之类的东西,接着用户按一下“留言”(到目前为止工作都在客户端),浏览器就把这些信息传送到服务器的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理,在本例中就是把用户提交的信息存入指定的文件中,最后CGI程序给客户端发回一个“留言结束”字样的页面,用户可以在浏览器里看到。
&&在进行CGI编程之前,我们先了解HTML的一些知识。CGI可以使用多种编程语言来实现,包括C、 C++、Perl等,但在嵌入式设备的开发中,一般都不会采用Perl等解释性语言,因为这种语言还需要有解释执行的支撑模块,会占用存贮空间和内存,最常用的方法当然是用C来编写,但C并不是很适合开发象CGI这种需要大量进行字符串操作的程序,编程比较烦琐,因此,对于一个专业的开发人员来说,首先想到的应该是有没有可复用的库来支持快速高效的开发CGI程序。幸运的是目前就有不少开放源码的支持CGI开发的 C库。我们在此只介绍CGIC,有兴趣的朋友可以自己在Internet上搜索其他的C库。
CGIC库的移植
& &CGIC是一个支持CGI开发的开放源码的标准C库,可以免费使用,只需要在开发的站点和程序文档中有个公开声明即可,表明程序使用了CGIC库,用户也可以购买商业授权而无需公开声明。
& & CGIC能够提供以下功能:
& &1&&分析数据,并自动校正一些有缺陷的浏览器发来的数据;
& &2&&透明接收用GET或 POST方法发来的From数据;
& &3& &能接受上传文件;
& &4& &能够设置和接收cookies;
& &5& &用一致的方式处理From元素里的回车;
& &6& &提供字符串,整数,浮点数,单选或多选功能来接收数据;
& &7& &提供数字字段的边界检查;
& &8& &能够将CGI环境变量转化成C中的非空字符串;
& &Array& &提供CGI程序的调试手段,能够回放CGI程序执行时的CGI状态;
&&总之,CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作系统。
&&以下描述CGIC的移植过程。
&&从CGIC的主站点/cgic/下载源码,当前最新版本是2.05版。将其解压并进入源码目录
& & # tar xzf cgic205.tar.gz
& & # cd cgic205
& & 修改Makefile文件,找到CC=gcc,将其改成CC=arm-linux-gcc,找到AR=ar,将其改成AR=arm-linux-ar,找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。找到gcc cgictest.o -o cgictest.cgi ${LIBS},将其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},找到gcc capture.o -o capture ${LIBS},将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},并保存退出。
& &然后运行make进行编译,得到的CGIC库libcgic.a,我们通过调试辅助程序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。
& &将capture和cgictest.cgi拷贝到主机的/nfs/www/cgi-bin目录下。
& & 在工作站的浏览器地址栏输入http://1Array2.168.67.16/cgi-bin/cgictest.cgi,可以看到页面,表示CGIC库和测试脚本都移植成功。cgictest.cgi比较完整的展现了CGIC库的功能,在开发基于CGIC库的CGI程序前最好先掌握cgictest.cgi程序,也是用户开发特定应用程序时的参考范例。
&&HTML模板的制作
Web方式的应用开发一般都会将界面和程序逻辑脱离开来,允许在一定程度下更改界面,如改变界面文本的属性,建立多语言版本等,而无需改动程序逻辑。界面一般由美工来进行制作,而程序员负责具体功能的实现。在 HTML中,表单 (FORM)是最主要的传递信息的手段,它适用于任何浏览器。表单中有很多元素,包括输入文本框,单选框,多选框,按钮,等等,可以提供信息的交互。具体对象说明和语法请参见其他HTML书籍,在这里不作介绍。根据应用需求,美工或其他设计人员将最后的Web页面设计出来,作为程序员进行开发的模板。
& & CGI程序的工作一般就是接收表单数据,进行数据处理,最后根据处理结果生成新的页面返回给浏览器。表单数据一般是以POST方法提交给服务器,由CGI程序获得,程序必须要将界面数据和内部数据对应起来才能够进行下一步的处理。CGI程序从页面获取数据就根据元素名字/值中的元素名字来进行区分。但CGI返回页面就比较麻烦。由于界面在程序开发完成后还有可能会改变,而且有些需要程序处理的地方可能没有表单元素,因此对程序来说,不能以表单元素名作为区分的基础,一般方法是采用HTML中的注释来标记。
& & 程序员需要在模板中为每一个表单元素以及其他任何需要程序处理的地方,按照一定规则,如注释的下一行就是表单元素行,建立其注释标记。CGI程序就可以根据注释标记来判断表单元素信息并进行处理。程序逐行读取模板文件,检查有无注释标记,如有的话,则下一行需要进行处理,给表单元素赋上数据,最后就可以返回带数据的页面给浏览器。
& & HTML模板还需要关注的是输入的检查。根据输入检查越早越好的原则,需要在用户界面上就对用户提交的数据进行检查。目前一般是采用javascript脚本的方式。当用户提交数据时,表单对象的onSubmit方法就会被调用,在该方法里就可以对用户的输入进行检查。常用的检查有是否必需、最大/小长度、是否字符、是否数字、email地址、IP地址是否正确、是否匹配一个正则表达式等。
CGI程序的开发
& & CGI程序的工作一般就是接收表单数据,根据应用需求进行数据处理,最后根据处理结果生成新的页面返回给浏览器。表单数据一般是以POST方法提交给服务器,由CGI程序获得,程序根据元素名字/值中的元素名字来区分数据,完成数据处理后,再读取相应的模板文件,根据注释标记将对应的数据填充到HTML文本中去,生成最后的页面返回给浏览器。
& & 程序一般逻辑为:
& & 1.&&安全性检查,是否允许运行脚本;
& & 2.&&处理用户提交的数据,根据元素名字/值中的元素名字来区分数据,然后根据应用需求进行数据处理;
& & 3.&&将处理结果填充表单,根据注释标记将对应的数据填充到HTML文本中去,生成最后的页面返回给浏览器。
& & 关于具体的代码实现细节,用户可以参考《嵌入式Linux系统开发详解-基于EPArray3XX系列ARM》一书的相关章节。(全文完)
以上内容由
搜集整理,如转载请注明原文出处,并保留这一部分内容。
  “华夏名网”
是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构评价为十大IDC服务商之一。
华夏名网网址导航:
上一篇:下一篇:
(4915次点击) (2767次点击) (4157次点击) (2792次点击) (2365次点击) (3724次点击) (3565次点击) (2358次点击) (2528次点击) (2437次点击)
(3413次点击) (3231次点击) (3242次点击) (3988次点击) (2403次点击) (2318次点击) (3208次点击) (3615次点击) (2348次点击) (2331次点击)
&2002- 飞数科技 版权所有
电话总机:028-91 94
公司地址:四川省成都市青龙街51号倍特康派大厦10楼5号

我要回帖

更多关于 电影天堂迅雷下载 的文章

 

随机推荐