CGIC库之get与post请求二 多路温度
Posted wddx5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGIC库之get与post请求二 多路温度相关的知识,希望对你有一定的参考价值。
原文链接:https://blog.csdn.net/cumtzdlxm/article/details/78155470
html.h
#include<stdio.h> void html_begin(void); void html_body(void); void html_body_noimg(void); void html_end(void); void html_refresh(char* second, char* url); /*---------html begin tag-------------*/ void html_begin(void) { printf("Content-type:text/html "); printf("<html>"); printf("<title>TC90000多路温度采集控制系统</title>"); //printf("<link href="/noneline.css" rel="stylesheet" type="text/css">"); printf("<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>"); } /*---------html refresh tag-------------*/ void html_refresh(char* second, char* url) { printf("<META HTTP-EQUIV="REFRESH" CONTENT="%s;URL=%s">", second, url); } /*---------html body tag-------------*/ void html_body(void) { printf("<body background="/bg_black.gif">"); printf("<div align="center">"); } /*---------html body tag-------------*/ void html_body_noimg(void) { printf("<body><div align="center">"); } /*---------html end tag-------------*/ void html_end(void) { printf("</div></body></html>"); }
show.c
#include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/shm.h> #include "html.h" #define DEF_MAX_CHANNEL 4 //采集的路数 //消息队列接收时索引值 #define TEMP_SMG_INDEX_BASE 10 #define WEB_SMG_INDEX 2 #define WEB_UPDATE_SMG_INDEX 3 #define UPDATE_TIME_SMG_INDEX 4 //系统总体数据结构 struct st_sys{ int temp_max[DEF_MAX_CHANNEL]; //设置每路温度报警最大值 float temp_data[DEF_MAX_CHANNEL]; //每路温度 char status[DEF_MAX_CHANNEL]; //每路状态 char update_time; //网页刷新秒数 }; struct st_sys g_dev[1]; //消息队列数据结构 struct st_msg_req{ long int index; char req; }; int msg_send(int msgid) { struct st_msg_req cmd; cmd.index = WEB_UPDATE_SMG_INDEX; cmd.req = 0x1; if(msgsnd(msgid,(void*)&cmd,1,0)==-1) return -1; return 0; } int get_msgid(void) { int id = -1; id = msgget((key_t)1234,0666|IPC_CREAT); if(id == -1){ printf("msgget error "); exit(1); } return id; } void* set_web_shm(void) { int shmid; void* shmaddr=(void*)0; if((shmid=shmget((key_t)2345,sizeof(struct st_sys),0666|IPC_CREAT))<0){ return NULL; }else{ if((shmaddr=shmat(shmid,(void*)0,0))==(char *)-1){ return NULL; } } printf("set shm ok... "); return shmaddr; } char area_name[4][16]={"锅炉区","螺栓区...","电缆区...","汽电区..."}; //在网页上显示四路温度数据 void show_temp_table() { int i; printf("<table width="1024" border="0"><tr>"); for(i=0;i<4;i++){ printf("<td><table width="250" border="0"><tr><td colspan="2" bgcolor=#CCFFFF>"); printf("<div align=center>第%d路</div></td></tr>",i+1); printf("<tr><td width="82" bgcolor=#33CCFF>监控区域:</td>"); printf("<td width="158" bgcolor=#33CCFF>%s</td></tr>",area_name[i]); printf("<tr><td bgcolor=#33CCFF>连接状态:</td>"); if(g_dev->status[i]==1) printf("<td bgcolor=#33CCFF>%s</td></tr>","连通"); else printf("<td bgcolor=#33CCFF>%s</td></tr>","断开"); printf("<tr><td bgcolor="#33CCFF">当前温度:</td>"); printf("<td bgcolor="#33CCFF">%4.2f</td></tr>",g_dev->temp_data[i]); printf("<tr><td bgcolor="#33CCFF">报警上限:</td>"); printf("<td bgcolor="#33CCFF">%d</td></tr></table></td>",g_dev->temp_max[i]); } printf("</tr></table>"); } void show_sys_area(void) { printf("<TABLE WIDTH=800 BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD COLSPAN=5>"); printf("<IMG SRC="temp_1.jpg" WIDTH=1024 HEIGHT=94></TD><TD>"); printf("<IMG SRC="space.jpg" WIDTH=1 HEIGHT=94></TD></TR><TR>"); if(g_dev->temp_data[0] <= (float)g_dev->temp_max[0]) printf("<TD COLSPAN=2><IMG SRC="temp_21.jpg" WIDTH=400 HEIGHT=108></TD>"); else printf("<TD COLSPAN=2><IMG SRC="temp_22.jpg" WIDTH=400 HEIGHT=108></TD>"); if(g_dev->temp_data[1] <= (float)g_dev->temp_max[1]) printf("<TD COLSPAN=2 ROWSPAN=2><IMG SRC="temp_31.jpg" WIDTH=381 HEIGHT=133></TD>"); else printf("<TD COLSPAN=2 ROWSPAN=2><IMG SRC="temp_32.jpg" WIDTH=381 HEIGHT=133></TD>"); printf("<TD ROWSPAN=4><IMG SRC="temp_4.jpg" WIDTH=243 HEIGHT=409></TD>"); printf("<TD><IMG SRC="space.jpg" WIDTH=1 HEIGHT=108></TD></TR><TR>"); if(g_dev->status[2]==1){ if(g_dev->temp_data[2] <= (float)g_dev->temp_max[2]) printf("<TD ROWSPAN=3><IMG SRC="temp_51.jpg" WIDTH=193 HEIGHT=301></TD>"); else printf("<TD ROWSPAN=3><IMG SRC="temp_52.jpg" WIDTH=193 HEIGHT=301></TD>"); }else{ printf("<TD ROWSPAN=3><IMG SRC="temp_5.jpg" WIDTH=193 HEIGHT=301></TD>"); } if(g_dev->status[3]==1){ if(g_dev->temp_data[3] <= (float)g_dev->temp_max[3]) printf("<TD ROWSPAN=3><IMG SRC="temp_61.jpg" WIDTH=207 HEIGHT=301></TD>"); else printf("<TD ROWSPAN=3><IMG SRC="temp_62.jpg" WIDTH=207 HEIGHT=301></TD>"); }else{ printf("<TD ROWSPAN=3><IMG SRC="temp_6.jpg" WIDTH=207 HEIGHT=301></TD>"); } printf("<TD><IMG SRC="space.jpg" WIDTH=1 HEIGHT=25></TD></TR><TR>"); printf("<TD COLSPAN=2 ROWSPAN=2> <IMG SRC="temp_7.jpg" WIDTH=381 HEIGHT=276></TD>"); printf("<TD><IMG SRC="space.jpg" WIDTH=1 HEIGHT=276></TD></TR></TABLE>"); } int main(int argc, char *argv[]) { int i,msgid; char update_time[4]; struct st_sys* shm_dev; if((msgid=get_msgid()) < 0){ printf("msg_web id error "); } if(msg_send(msgid)==0){ if((shm_dev=(struct st_sys*)set_web_shm())==NULL){ printf("shm_web error "); exit(1); }else{ for(i=0;i<DEF_MAX_CHANNEL;i++){ g_dev->temp_max[i] = shm_dev->temp_max[i]; g_dev->temp_data[i] = shm_dev->temp_data[i]; g_dev->status[i] = shm_dev->status[i] ; } g_dev->update_time = shm_dev->update_time; } } html_begin(); bzero(update_time,4); sprintf(update_time,"%d",g_dev->update_time); //html_refresh(update_time,"show.cgi"); //页面秒自动刷新 html_refresh("20","show.cgi"); //页面秒自动刷新 html_body_noimg(); show_sys_area();//显示系统监控区域图片 show_temp_table();//显示多路数据表格 printf("<form method="get" action="show.cgi">"); printf("<input type="submit" value="刷新状态"></form>"); html_end(); return 0; }
新建文件夹 gcc show.c -o show.cgi
浏览器输入 http://ip地址/show.cgi的路径
以上是关于CGIC库之get与post请求二 多路温度的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫 | 爬取酷我音乐并下载——requests库之GET方法(免费听歌!!!)