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 ...
随机推荐
- 【刷题】洛谷 P3807 【模板】卢卡斯定理
题目背景 这是一道模板题. 题目描述 给定\(n,m,p( 1\le n,m,p\le 10^5)\) 求 \(C_{n+m}^{m}\ mod\ p\) 保证 \(p\) 为prime \(C\) ...
- 安装svn测试环境
centos 6.5 web service模式 安装svn测试服务器 1 下载subversion shell>yum install subversion 2 查看安装的版本 [root@c ...
- MapReduce(五) mapreduce的shuffle机制 与 Yarn
一.shuffle机制 1.概述 (1)MapReduce 中, map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流程,这个流程就叫 Shuffle:( ...
- python基础----文件处理
一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声:燕池 萧: ...
- day2-python基础
- java如何优雅的实现时间控制
前言:最近小王同学又遇到了一个需求:线上的业务运行了一段时间,后来随着使用人数增多,出现了一个问题是这样的,一个订单会重复创建几次,导致数据库里出现了很多垃圾数据.在测试同学的不断测试下,发现问题出在 ...
- GitLab安装部署与管理
一.安装Gitlab前系统预配置准备工作 操作系统:centos 7.3 1.关闭firewalld防火墙 #systemctl stop firewalld //关闭防火墙 #systemctl d ...
- 我学习的第一个uiautomator从创建到运行结束
一.新建自动化脚本 1.新建java工程包 [file]----[new]----[Java Project] 新建工程 [右 ...
- iOS APNs实战分享
序言: 因为App的功能需要,最近一直在调研苹果的APNs推送,开始时觉得超麻烦,现在感觉还是比较easy,“难者不会,会者不难”,自己踩过了这么多的坑终于会了,不出来吐槽(装X)一下对不起自己,23 ...
- #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
原文 功能: 首先,sizeof(int)肯定是2的次方数,比如32位是4,64位是8 ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 的意思就 ...