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请求二 多路温度的主要内容,如果未能解决你的问题,请参考以下文章

请求库之requests库

Python爬虫 | 爬取酷我音乐并下载——requests库之GET方法(免费听歌!!!)

Python爬虫从0到1 | 爬取酷我音乐信息并下载 ——requests库之GET方法(能省钱!!!)

请求库之requests

使用cgic库搭配ctemplate编写cgi程序

python爬虫 requests库之post请求