zoukankan      html  css  js  c++  java
  • cgic实现输入文件名,打开文件的功能

    a.c文件

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdarg.h>
    #include "cgic.h"

    void HandleSubmit();// 提交
    void Address();//多行文本
    void ShowForm();//页面的显示
    void ReplaceConf();
    void show(char *file);

    /*{{{*/

    #define TRANS_BUFFER_LEN 0x100000
    char gBuffer1[TRANS_BUFFER_LEN];
    char gBuffer2[TRANS_BUFFER_LEN];
    char* gBufferSource = gBuffer1;
    char* gBufferDest = gBuffer2;

    int firsttime = 1;
    //对html文件特殊字符替换
    void replaceString(char* substrBefore, char* substrAfter)
    {
    int offsetTrans = 0;
    int offsetDest = 0;
    char* srcPtr = gBufferSource;
    char* dstPtr = gBufferDest;
    char* pStrPad = srcPtr;
    char* pStrPadOld = srcPtr;
    int totalLength = strlen(srcPtr);

    memset(dstPtr, 0, sizeof(dstPtr));

    while((pStrPad = strstr(pStrPad, substrBefore)) != NULL){
    memcpy(dstPtr+offsetDest, srcPtr+offsetTrans, (pStrPad - pStrPadOld));
    offsetDest += pStrPad - pStrPadOld;
    offsetTrans = pStrPad - srcPtr + strlen(substrBefore);

    memcpy(dstPtr+offsetDest, substrAfter, strlen(substrAfter));
    offsetDest += strlen(substrAfter);

    pStrPad += strlen(substrBefore);
    pStrPadOld = pStrPad;
    }

    memcpy(dstPtr+offsetDest, srcPtr+offsetTrans, totalLength - offsetTrans);

    gBufferSource = dstPtr;
    gBufferDest = srcPtr;
    }

    //will malloc outputBuffer
    //for files less than 1MB
    char* getFileContent(const char* filename)
    {
    int maxLen = 0x100000;
    int lengthRead = 0;
    char* tmpBuffer = NULL;
    char* outputBuffer = NULL;
    FILE* fd;

    if((fd=fopen(filename,"r+"))!=NULL)
    {
    tmpBuffer = (char*)malloc(sizeof(char) * maxLen);
    lengthRead = fread(tmpBuffer, 1, maxLen, fd);
    outputBuffer = strdup(tmpBuffer);
    free(tmpBuffer);
    return outputBuffer;
    }
    else
    {
    return NULL;
    }
    }
    //文件出错记录程序
    void wlog(const char* fmt, ...)
    {
    FILE* pFileLog = NULL;
    if (firsttime)
    pFileLog = fopen("cgi-debug.log", "wt");
    else
    pFileLog = fopen("cgi-debug.log", "at");

    firsttime = 0;

    if (NULL == pFileLog)
    return;

    va_list args;
    va_start(args, fmt);
    vfprintf(pFileLog, fmt, args);
    va_end(args);

    fclose(pFileLog);
    }

    int cgiMain()
    {
    FILE* fa;
    char szTemp[255]={};
    char FileName_ntsm[80]="../var/ntpconf.html";

    cgiHeaderContentType("text/html");
    if (cgiFormSubmitClicked("apply") == cgiFormSuccess)
    {
    HandleSubmit();

    }

    show(szTemp);

    return 0;
    }
    void show(char *file)
    {
    FILE* fa;
    char szTemp[255];
    char FileName_ntsm[80]="../var/ntpconf.html";

    int lengthRead = 0;
    if((fa=fopen(FileName_ntsm,"r+"))!= NULL)
    {
    memset(gBufferSource, 0, TRANS_BUFFER_LEN);
    lengthRead = fread(gBufferSource, 1, TRANS_BUFFER_LEN, fa);
    replaceString("$@@${action}", cgiScriptName);//替换action动作为cgic

    replaceString("$@@${ntp.conf}", file);

    printf("%s", gBufferSource);
    }
    }
    void ReplaceConf()
    {
    FILE* file_fa;
    char buff[TRANS_BUFFER_LEN];
    char FileName[80]="/etc/ntp.conf";
    if((file_fa=fopen(FileName,"r+"))==NULL)
    {
    fprintf(cgiOut, "filename is wrong");
    }
    fread(buff, 1, TRANS_BUFFER_LEN, file_fa);
    replaceString("$@@${ntp.conf}", buff);
    }
    void HandleSubmit()// 提交
    {
    Address();
    }

    void Address()
    {
    char FileName[2048];
    char command[80];
    char buff[TRANS_BUFFER_LEN];
    memset(buff,TRANS_BUFFER_LEN,0);

    cgiFormStringNoNewlines("file_name", FileName, 81);
    cgiHtmlEscape(FileName);//输出到页面文件名

    FILE * file_fa = fopen(FileName,"r");
    if(file_fa==NULL)//ntp.txt 文件出错警报
    cgiHtmlEscape("open ntp.txt is wrrong");

    fread(buff, 1, TRANS_BUFFER_LEN, file_fa);

    show(buff);

    fclose(file_fa);
    }

    global.html中内容 

    <html><head>
    <!-- 2.0: multipart/form-data is required for file uploads. -->
    <form method="POST" enctype="multipart/form-data" action="$@@${action}">
    <p>ntpq -p </p>
    <textarea cols="86" rows="5">$@@${ntpq_out}</textarea>
    <p>ntpdate -d 192.168.5.21 </p>
    <textarea cols="86" rows="28">$@@${ntpdate_out}</textarea>
    <p>当前监控IP和限制网段</p>
    <textarea cols="86" rows="3">$@@${MonitIP}</textarea>
    <p>当前设置的明晰路由</p>
    <textarea cols="86" rows="3">$@@${MonitIP}</textarea>
    </form>
    </body></html>

  • 相关阅读:
    Android 报错Android
    转:JavaWeb学习总结(一) 写得相当不错
    infer 编译代码审查命令记录
    转:infoQ 2015开发者资料下载
    转:java 进阶之路
    转:使用gradle 构建编译程序
    web开发者的博客
    转:http2基本中文翻译
    转:http2的资料与使用
    转:百度手机地图网络性能优化实践
  • 原文地址:https://www.cnblogs.com/zhouhbing/p/4244353.html
Copyright © 2011-2022 走看看