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>

cgic实现输入文件名,打开文件的功能的更多相关文章

  1. 关闭Visual Studio 2015 关闭单击打开文件的功能

    工具-->选项-->环境-->选项卡和窗口-->预览选项卡 去掉“在解决方案资源管理器中预览选定的文件(在按住Alt的同时单击可避免预览)(X)”的勾选

  2. 跟我一起玩Win32开发(19):浏览和打开文件

    在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件.本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单. 方法一:老规矩 这是一种传统方法,使用 ...

  3. C#选择文件、选择文件夹、打开文件

    1.选择文件用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以 ...

  4. Winform控件:打开文件对话框(OpenFileDialog)

    OpenFileDialog类提供了用户打开文件的功能,它有如下属性: 属性 InitialDirectory:设置对话框的初始目录. Filter: 要在对话框中显示的文件筛选器,例如," ...

  5. [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等

    1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...

  6. 代码实现:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名

    package com.loaderman.test; import java.io.File; import java.io.FileReader; import java.util.Scanner ...

  7. uniapp使用uni.openDocument打开文件时,安卓打开成功,iOS打开失败【原因:打开的文件的文件名是中文】

    解决办法:使用escape进行文件名编码 uni.downloadFile({ url: url, success: function(res) { var filePath = res.tempFi ...

  8. MFC打开文件对话框

    { CString FilePathName; CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框 if(dlg.DoModal()==IDO ...

  9. java中文件保存、打开文件对话框

    package com.soft.test; //AWT: FileDialog类 + FilenameFilter类 可以实现本功能 //Swing: JFileChooser类 + FileFil ...

随机推荐

  1. 【BZOJ2329】括号修复(Splay)

    [BZOJ2329]括号修复(Splay) 题面 BZOJ 洛谷 题解 本来想着用线段树来写 但是有一个区间翻转 所以不能用线段树了,就只能用平衡树 然后直接\(Splay\)就好了 注意一下几个标记 ...

  2. Unity3D for VR 学习(7): 360°全景照片

    在VR应用中,有一个相对简单的虚拟现实体验,那就是360°全景照片浏览器, 他可以使得手机拍照的”全景”照片,  得以”恢复”当时拍照的场景全貌,  这个创意的确比单纯的2d图片更有震撼力一些,故本文 ...

  3. 洛谷 P4219 [BJOI2014]大融合 解题报告

    P4219 [BJOI2014]大融合 题目描述 小强要在\(N\)个孤立的星球上建立起一套通信系统.这套通信系统就是连接\(N\)个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的 ...

  4. innodb--表空间

    MySQL把数据库中表结构的定义信息保存到数据库目录的.frm文件中. 在InnoDB中数据库中存储的数据及索引实际是存放在表空间里的(tablespace). 可以将每个基于InnoDB存储引擎的表 ...

  5. Kubernetes - Deploy Guestbook example on Kubernetes

    This scenario explains how to launch a simple, multi-tier web application using Kubernetes and Docke ...

  6. [LeetCode] 25. Reverse Nodes in k-Group ☆☆☆

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k  ...

  7. 关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题

    在 web 项目开发过程中,我们常常使用到 JSP,以及对静态资源,js,css 等引用,但是我们应该把这些资源文件放在哪个目录下面咧,怎么引用. 当然如果是前后端分离的项目倒不用考虑这些. WEB- ...

  8. Windows API函数大全(精心总结)

    WindowsAPI函数大全(精心总结)    目录 1. API之网络函数... 1 2. API之消息函数... 1 3. API之文件处理函数... 2 4. API之打印函数... 5 5. ...

  9. My latest news(--2016.12.31)

    2016.12.31  前一天晚上看 “纪实新闻” ,白天看视频,晚上刷题,看电影<湄公河行动> 2016.12.30 18:36 昨天上午考完了本学期的最后一门课程,下午乒乓+值班,今天 ...

  10. java中集合去重1

    //TreeMap 处理 处理后 得到的值 按拼音排序 TreeMap map = new TreeMap(new MaterialComparator()); map.put("东莞&qu ...