|
|
|
|
 求助:用cgi实现动态监测数据 - avirl [ 2005-01-22 13:42 | 1,459 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - happyhg [ 2005-02-01 11:23 | 38 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - bbwolf [ 2005-01-22 19:57 | 64 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - tclwp [ 2005-01-22 16:45 | 1,653 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - avirl [ 2005-01-26 11:45 | 738 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - bbwolf [ 2005-01-26 13:52 | 493 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - avirl [ 2005-01-26 19:08 | 489 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - bbwolf [ 2005-01-26 19:25 | 300 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - avirl [ 2005-01-26 20:21 | 1,037 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - bbwolf [ 2005-01-27 08:37 | 307 byte(s)]
 Re: 求助:用cgi实现动态监测数据 - teawater [ 2005-01-22 14:38 | 61 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
用c实现,在web服务器中有不断更新的数据文件value.txt,想通过cgi把value.txt中的倒数第二项数据读出,动态显示在网页上,希望的网页结果是:
value1 value2
× ×
——————其中× ×表示动态读出的数据, 希望在网页的固定位置改变这两个数据即可,即是覆盖显示
我没有做过网页,目前只会写出:
int main(int argc, char *argv[])
{
int i;
int value[2];
FILE * fp;
fp=fopen("value.txt","r");
if(fp==NULL)
{
printf("Can't open the file for read.
");
}
printf("content-type:text/html
");
printf("<html><head></head><body>");
printf("<h2>value1 value2</h2>
");
while(1) ---------------注意这个循环, 只能不断的换行显示数据,一会网页就满了,所以希望在固定的位置覆盖显示
{
fseek(fp,-4L,2);
for(i=0;i<2;i++)
{
fscanf(fp,"d",&value[i]);
}
printf("%4d %4d",value[0],value[1]);
}
close(fp);
printf("</body></html>");
return(0);
}
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
首先,你需要做一个html文件的模板(用来显示你所需要的数据),不过模板并不存放即时的数据,只是在显示
value1 value2的html语句中将value1 value2的值用[%value1] 、[%value2] 代替,
然后写一个C程序处理该模板,该程序读入模板文件,再读取value.txt中所需要的数据更新该2 个待填的地方(在内存中替换),然后将生成的完全html文件写入磁盘中(假设写入文件名为example.shtml)。
再建立一个带iframe的html文件home-page,内容如下:
<HTML>
<head>
<title>home-page</title>
</head>
</BODY>
<IFRAME frameBorder=0 height=330 src="path - to - example.shtml"
width=420 scrolling=auto></IFRAME>
</BODY>
</HTML>
其中path - to - example.shtml是你的example.shtml的URL
注意在example.shtml中的head部分加入
<meta http-equiv="refresh" content="1">
令被嵌入home-page中的一小块数据显示区(example.shtml页面)能每隔1秒刷新一次,当然时间间隔你可以自己定。更要注意的是如果你是在做大型站点的频繁被访问的页面时不要采取自动刷新, 否则会给server带来额外的压力
现在,CGI不断根据新数据更新生成example.shtml ,而home-page.html中的数据区不断刷新,就达到要求了,之所以把example.shtml嵌入home-page.html ,是考虑到在大型管理界面中就一页就显示一点东西不太好,可以同时显示许多要监视的数据 ,当然,可以用libgif 根据数据和时间生成数据变化观测图 ,更加直观。
楼主是什么单位的? 可以的话请用站内信件告诉我
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
按照tclwp的意见,经过这两天的尝试,基本显示出来了,只是访问web中的iframe时,iframe中嵌入的example.shtml会间隔地消失,重新链接,example.shtml又出现,如此反复。数据是相应变化的。我的理解是:
1.处理的c程序似乎与cgi无关,程序只是读入exampletemplate.shtml,根据动态监测的数据不断改写其中的[%value],然后写入到文件example.shtml,然后iframe调用example.shtml。也就是说example.shtml在不断地被打开被改写,同时被iframe调用。
2.出现间隔消失的现象似乎是example.shtml正在被程序处理,比如打开之后还未关闭,这之间虽然持续时间很短,但是总会导致iframe无法访问example.shtml的情况
3.还有,shtml与html有什么区别哪,为什么是example.shtml而不是example.html,
不知道我理解得对不对,应该怎样解决出现间隔消失的现象哪? 各位有经验吗
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
谢谢bbwolf。
迷惑了,bbwolf解释只有shtml可以内嵌cgi程序,可是大量的html不也用了cgi吗?看来我对tclwp
的帖子没有理解,
“value1 value2的html语句中将value1 value2的值用[%value1] 、[%value2] 代替,
然后写一个C程序处理该模板,该程序读入模板文件,再读取value.txt中所需要的数据更新该2 个待填的地方(在内存中替换),然后将生成的完全html文件写入磁盘中(假设写入文件名为example.shtml)。 ”
看似就是及时更新example.shtml文件阿..
怎么与cgi关联哪
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
应该这样运行<! --#exec cgi = "/cgi-bin/counter.pl"-->
把这个嵌在shtml文件中。
apache应该有这句:AddHandler server-parsed .shtml。
这种技术应该是:SSI(server side include)
我有4,5年没写过cgi了,不过理论上应该不会错,你google一下ssi, shtml。
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
to bbwolf,
谢谢及时回复。我的目标系统是uclinux,先没有说清楚。uclinux应该不支持perl,在uclinux实现动态网页的介绍说用c语言的cgi实现。你的回答是针对linux的,按照你的提示,我的主页应该做成shtml(只是把后缀改一下?),如:index.shtml
<HTML>
<head>
<title>嵌入式远程数据监控系统</title>
</head>
<center>
<H1>嵌入式远程数据监控系统</H1>
<H2>自控实验室</H2>
<HR>
</center>
<BODY>
<IFRAME frameBorder=0 height=330 src="cgi-bin/example.html"
width=500 scrolling=auto></IFRAME>
<Right>
</BODY>
</HTML>
在其中嵌入iframe,调用cgi,其中example.html被cgi程序不断修改。
我先试试吧
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
个人意见,如果是嵌入式,还是用c直接写吧,不要用ssi了,而且用了也未必支持。所谓ssi,是一种技术,任何语言编写的程序都可以通过ssi这种方式调用。但需要服务器端支持。
你在普通html(模版)文件里做个标记,然后你的cgi把这个标记动态修改了就可以了。这样做其实和直接print html语句是一样的,但是便于编程和维护。
|
|
[Original]
[Print]
[Top]
|
|
|