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>
cgic实现输入文件名,打开文件的功能的更多相关文章
- 关闭Visual Studio 2015 关闭单击打开文件的功能
工具-->选项-->环境-->选项卡和窗口-->预览选项卡 去掉“在解决方案资源管理器中预览选定的文件(在按住Alt的同时单击可避免预览)(X)”的勾选
- 跟我一起玩Win32开发(19):浏览和打开文件
在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件.本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单. 方法一:老规矩 这是一种传统方法,使用 ...
- C#选择文件、选择文件夹、打开文件
1.选择文件用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以 ...
- Winform控件:打开文件对话框(OpenFileDialog)
OpenFileDialog类提供了用户打开文件的功能,它有如下属性: 属性 InitialDirectory:设置对话框的初始目录. Filter: 要在对话框中显示的文件筛选器,例如," ...
- [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等
1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...
- 代码实现:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
package com.loaderman.test; import java.io.File; import java.io.FileReader; import java.util.Scanner ...
- uniapp使用uni.openDocument打开文件时,安卓打开成功,iOS打开失败【原因:打开的文件的文件名是中文】
解决办法:使用escape进行文件名编码 uni.downloadFile({ url: url, success: function(res) { var filePath = res.tempFi ...
- MFC打开文件对话框
{ CString FilePathName; CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框 if(dlg.DoModal()==IDO ...
- java中文件保存、打开文件对话框
package com.soft.test; //AWT: FileDialog类 + FilenameFilter类 可以实现本功能 //Swing: JFileChooser类 + FileFil ...
随机推荐
- java学习2-webserver测试工具soapUI使用
file-->new soap project-->输入project Name(随便)输入 WSDL地址,其他默认,点ok展开左侧加载的项目下的方法名,双击Request ,右侧出现测试 ...
- c# partial使用
1.有2个类 class1.cs ,class2.cs 2.这2个类里面都可以定义成这样 public partial class ClassAll { } 3.结果,里面的方法都是共享的,就像 ...
- Sort Integers II
Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(n ...
- [CodeVs1515]跳(lucas定理+费马小定理)
嘿嘿嘿好久没写数学题了,偶尔看到一道写一写... 题目大意:一个(n+1)*(m+1)[0<=n, m<=10^12,n*m<=10^12]的矩阵,C(0,0)=1,C(x,y)=C ...
- bzoj 4332: JSOI2012 分零食 快速傅立叶变换
题目: Description 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\(f(x)=O*x^2+S*x+U\) 现 ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- 前端PHP入门-010-内部函数
内部函数,是指在函数内部又声明了一个函数. 注意事项: 内部函数名,不能是已存在的函数名 假设在函数a里面定义了一个内部函数,不能调用两次函数a. <?php function foo() { ...
- lable标签的妙用
最近在设计网页时,只要一加入表单或表单对象,文本框等等,就会在代码中加入一个<label></label>,一直没明白这个label是做什么的,今天正好看到了解释: Label ...
- Python学习笔记(四十)— 内置模块(9)HTMLParser
摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432002312 ...
- SpringCloud入门系列(一)
https://www.cnblogs.com/edisonchou/p/java_spring_cloud_foundation_sample_list.html