81.内存模式实现cgi查询

  • 创建全局的二级指针

    1 char  ** g_pp;//全局的二级指针
  • 获取数据有多少行

     1 //获取行数
     2 int getimax()
     3 {
     4     int hang = -1;
     5     FILE *pf = fopen(path, "r");//读文件打开路径
     6     if (pf == NULL)
     7     {
     8         printf("文件打开失败");
     9         return -1;
    10     }
    11     else
    12     {
    13         hang = 0;
    14         while (!feof(pf))//到了文件末尾返回1,没有返回0
    15         {
    16             char readstr[1024] = { 0 };
    17
    18             fgets(readstr, 1024, pf);//读取一行
    19
    20             hang++;//自增
    21
    22         }
    23         fclose(pf);//关闭
    24         return hang;
    25     }
    26 }
  • 定义行数

    1 int   imax = 16151574;//标示有多少行
  • 载入内存

     1 void loadfromfile()
     2 {
     3
     4     g_pp = (char **)malloc(sizeof(char*)*imax);     //分配指针数组
     5     memset(g_pp, ‘\0‘, sizeof(char*)*imax);//内存清零
     6
     7
     8     FILE *pf = fopen(path, "r");//读文件打开路径
     9     if (pf == NULL)
    10     {
    11         printf("文件打开失败");
    12         return -1;
    13     }
    14     else
    15     {
    16         for (int i = 0; i < imax; i++)
    17         {
    18             char str[1024] = { 0 };
    19             fgets(str, 1024, pf);//按行读取
    20             str[1024 - 1] = ‘\0‘;
    21             int  strlength = strlen(str);
    22
    23
    24             g_pp[i] = malloc(sizeof(char)*(strlength + 1));//处理/0
    25
    26             if (g_pp[i] != NULL)
    27             {
    28                 strcpy(g_pp[i], str);//拷贝到分配的内存
    29             }
    30         }
    31         fclose(pf);//关闭
    32     }
    33 }
  • 查询并写入到文件

    void search(char *str)
    {
        char strpath[100] = { 0 };
        sprintf(strpath, "I:\\%s.txt", str);
        FILE *pf = fopen(strpath, "w");//写的模式打开
    
        if (g_pp != NULL)
        {
    
            for (int i = 0; i < imax; i++)
            {
                if (g_pp[i] != NULL)
                {
                    char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
                    if (p != NULL)
                    {
                        puts(g_pp[i]);//打印
                        fputs(g_pp[i], pf);//输出到文件
                    }
                }
            }
        }
        fclose(pf);
    }
  • main

     1     loadfromfile();
     2     printf("Content-type:text/html\n\n");//换行
     3
     4     system("mkdir 1");
     5
     6     char szpost[256] = { 0 };
     7     gets(szpost);
     8     printf("%s", szpost);
     9
    10     char*p1 = strchr(szpost, ‘&‘);
    11     if (p1 != NULL)
    12     {
    13         *p1 = ‘\0‘;
    14     }
    15     printf("<br>%s", szpost + 5);
    16     printf("<br>%s", change(szpost + 5));
    17
    18     char *p2 = strchr(p1 + 1, ‘&‘);
    19     if (p2 != NULL)
    20     {
    21         *p2 = ‘\0‘;
    22     }
    23     printf("<br>%s", p1 + 6);
    24     printf("<br>%s", change(p1 + 6));
    25
    26     search(szpost + 5);//检索
  • cgi格式转换

     1 char* change(char *str)
     2 {
     3     char *tempstr = malloc(strlen(str) + 1);
     4     int x = 0, y = 0;
     5     char assii_1, assii_2;
     6     while (tempstr[x])
     7     {
     8         if ((tempstr[x] = str[y]) == ‘%‘)
     9         {
    10             //y+1 y+2
    11             if (str[y + 1] >= ‘A‘)
    12             {
    13                 assii_1 = str[y + 1] - 55;
    14
    15             }
    16             else
    17             {
    18                 assii_1 = str[y + 1] - 48;
    19             }
    20             if (str[y + 2] >= ‘A‘)
    21             {
    22                 assii_2 = str[y + 2] - 55;
    23             }
    24             else
    25             {
    26                 assii_2 = str[y + 2] - 48;
    27             }
    28             tempstr[x] = assii_1 * 16 + assii_2;
    29
    30             y += 2;
    31
    32         }
    33         x++;
    34         y++;
    35     }
    36     tempstr[x] = ‘\0‘;
    37
    38     return tempstr;
    39 }

完整代码

  1 #define   _CRT_SECURE_NO_WARNINGS
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5 #include<memory.h>
  6 #include <Windows.h>
  7 #define  path  "kaifang.txt"
  8
  9
 10
 11
 12
 13 char  ** g_pp;//全局的二级指针
 14 int   imax = 16151574;//标示有多少行
 15
 16 //获取行数
 17 int getimax()
 18 {
 19     int hang = -1;
 20     FILE *pf = fopen(path, "r");//读文件打开路径
 21     if (pf == NULL)
 22     {
 23         printf("文件打开失败");
 24         return -1;
 25     }
 26     else
 27     {
 28         hang = 0;
 29         while (!feof(pf))//到了文件末尾返回1,没有返回0
 30         {
 31             char readstr[1024] = { 0 };
 32
 33             fgets(readstr, 1024, pf);//读取一行
 34
 35             hang++;//自增
 36
 37         }
 38         fclose(pf);//关闭
 39         return hang;
 40     }
 41 }
 42
 43 char* change(char *str)
 44 {
 45     char *tempstr = malloc(strlen(str) + 1);
 46     int x = 0, y = 0;
 47     char assii_1, assii_2;
 48     while (tempstr[x])
 49     {
 50         if ((tempstr[x] = str[y]) == ‘%‘)
 51         {
 52             //y+1 y+2
 53             if (str[y + 1] >= ‘A‘)
 54             {
 55                 assii_1 = str[y + 1] - 55;
 56
 57             }
 58             else
 59             {
 60                 assii_1 = str[y + 1] - 48;
 61             }
 62             if (str[y + 2] >= ‘A‘)
 63             {
 64                 assii_2 = str[y + 2] - 55;
 65             }
 66             else
 67             {
 68                 assii_2 = str[y + 2] - 48;
 69             }
 70             tempstr[x] = assii_1 * 16 + assii_2;
 71
 72             y += 2;
 73
 74         }
 75         x++;
 76         y++;
 77     }
 78     tempstr[x] = ‘\0‘;
 79
 80     return tempstr;
 81 }
 82
 83 void loadfromfile()
 84 {
 85
 86     g_pp = (char **)malloc(sizeof(char*)*imax);     //分配指针数组
 87     memset(g_pp, ‘\0‘, sizeof(char*)*imax);//内存清零
 88
 89
 90     FILE *pf = fopen(path, "r");//读文件打开路径
 91     if (pf == NULL)
 92     {
 93         printf("文件打开失败");
 94         return -1;
 95     }
 96     else
 97     {
 98         for (int i = 0; i < imax; i++)
 99         {
100             char str[1024] = { 0 };
101             fgets(str, 1024, pf);//按行读取
102             str[1024 - 1] = ‘\0‘;
103             int  strlength = strlen(str);
104
105
106             g_pp[i] = malloc(sizeof(char)*(strlength + 1));//处理/0
107
108             if (g_pp[i] != NULL)
109             {
110                 strcpy(g_pp[i], str);//拷贝到分配的内存
111             }
112         }
113         fclose(pf);//关闭
114     }
115 }
116
117 void search(char *str)
118 {
119     char strpath[100] = { 0 };
120     sprintf(strpath, "I:\\%s.txt", str);
121     FILE *pf = fopen(strpath, "w");//写的模式打开
122
123     if (g_pp != NULL)
124     {
125
126         for (int i = 0; i < imax; i++)
127         {
128             if (g_pp[i] != NULL)
129             {
130                 char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
131                 if (p != NULL)
132                 {
133                     puts(g_pp[i]);//打印
134                     fputs(g_pp[i], pf);//输出到文件
135                 }
136             }
137         }
138     }
139     fclose(pf);
140 }
141
142
143
144 void main()
145 {
146
147     loadfromfile();
148     printf("Content-type:text/html\n\n");//换行
149
150     system("mkdir 1");
151
152     char szpost[256] = { 0 };
153     gets(szpost);
154     printf("%s", szpost);
155
156     char*p1 = strchr(szpost, ‘&‘);
157     if (p1 != NULL)
158     {
159         *p1 = ‘\0‘;
160     }
161     printf("<br>%s", szpost + 5);
162     printf("<br>%s", change(szpost + 5));
163
164     char *p2 = strchr(p1 + 1, ‘&‘);
165     if (p2 != NULL)
166     {
167         *p2 = ‘\0‘;
168     }
169     printf("<br>%s", p1 + 6);
170     printf("<br>%s", change(p1 + 6));
171
172     search(szpost + 5);//检索
173 }

原文地址:https://www.cnblogs.com/xiaochi/p/8455889.html

时间: 2024-11-06 01:47:30

81.内存模式实现cgi查询的相关文章

Redis进阶实践之十八 使用管道模式提高Redis查询的速度

原文:Redis进阶实践之十八 使用管道模式提高Redis查询的速度 一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前的解决方案大都是从官网上查找和翻译的,每个实例也都调试了,正确无误.把结果告诉我同事的时候,我也跟清楚这个主题如何操作了,里面的细节也更清楚了.大然也有人说可以通过脚本来做这个操作,没错,但是我对脚本语言还没有研究很透,就不来班门弄斧了. 二.管道的由来

java运行时内存模式学习

学习java运行时内存模式: 各区介绍: 方法区(线程共享):用于存放被虚拟机加载的类的元数据:静态变量,常量,以及编译和的代码(字节码),也称为永久代(所有该类的实例被回收,或者此类classLoader被回收). Java堆(线程共享):存放对象实例和数组,这里是内存回收的主要地方.可以分为新生代(young)和年老代(tenured).从字面也可以知道,新生代存放刚刚建立的对象 而年老代存放长久没有被垃圾回收机制回收的对象.一般新生代有分为eden,from survivor和to sur

apache中配置php支持模块模式、cgi模式和fastcgi模式

apache中配置php支持模块模式.cgi模式和fastcgi模式 首先安装apache.MySQL和PHP,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了. ./configure –prefix=/usr/local/php5 /--with-mysql=/usr/local/mysql /--enable-fpm--with-apxs2=/usr/local/apache/bi

【JAVASE】JAVA内存模式和类加载机制,GC简单原理

先介绍一下类加载的过程: 我们编写的是源码文件java,通过jdk bin下面的javac工具,编译为class字节码文件,然后通过bin下面的java命令调用jvm解析class文件运行. java实际运行的时候依靠的是字节码,之所以说java跨平台就是因为jvm能够跨平台,只要有jvm的地方,java都可以运行. JVM装在Class文件的过程: 装载,准备,解析. JVM通过类加载器完成类的装载过程,具体如图所示 1.先通过 启动类加载器,完成基础类的加载 lib下面的  rt.jar(c

平坦内存模式、分段内存模式、实地址模式

IA-32处理器平台允许3种不同的访问系统内存的方法: (1)平坦内存模式 (2)分段内存模式 (3)实地址模式 平坦内存模式把全部系统内存表示为连续的地址空间.所有指令.数据和堆栈都包含在相同的地址空间中.通过称为线性地址(linear address)的特定地址访问每个内存位置. 分段内存模式把系统内存划分为独立段的组,通过位于段寄存器中的指针进行引用.每个段用于包含特定类型的数据.一个段用于包含指令码,另一个段用于包含数据元素,第三个段用于包含程序堆栈. 段中的内存位置是通过逻辑地址定义的

【原创】内存指针基地址查询算法

首先针对所有有NP,GPK等保护引擎,CE貌似都会被干掉所以这里写一篇关于自动查询内存基地址的伪代码算法,防止忘记. DWORD  _begin = 0x40000000; //用于32位 DWORD _end = 0x7FFFFFFF; DWORD _offset = 0; DWORD _offsetDp = 0xff; DWORD targetAddress = 0xBBBBB; for( DWORD i = _begin; i <= _end;i++) { for( _offset = 0

Oracle 11g dataguard三种模式以及实时查询(Real-time query)功能设置

之前我们讨论过<Linux Oracle 11g dataguard物理standby 配置过程>, 但是在实际过程中会遇到不同的问题,首先我们讨论下ORACLE DATAGUARD的三种模式, 保护最大化:这种模式的配置可以保证主库和备库的同步,任何情况下主库的损毁都不会导致已提交数据的丢失.如果主库和备库之间的网络出现问题,或者备库本身出现问题,都会导致主库停止数据处理. 可用最大化:这种模式和上面一种类似,也是会保证主库和备库的同步,区别在于,当网络或备库不可用时,主库仍然可以继续处理.

JavaWeb学习过程 之MVC模式下的查询

近些天一直在学习javaweb 但总是时断时续,今天终于有时间,来学习一下MVC下的查询模式. 一.首先先了解一下 什么是mvc? MVC是Model-View-Controller的简称,即模型-视图-控制器.它是一种设计模式,它吧应用程序分成三个核心模块,模型,视图,控制器.他们各自处理自己的任务. 模型:是应用程序的主体部分,模型指的是业务模型. 一个模型可以为多个视图提供数据. 视图:是用户看到的并与之交互的界面. 可以向用户显示相关的数据,接受用户的输入,但是它不进行任何实际的业务处理

apache中配置php支持模块模式、cgi模式和fastcgi模式的实验

首先安装apache.mysql和php,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了. ./configure –prefix=/usr/local/php5 /--with-mysql=/usr/local/mysql /--enable-fpm--with-apxs2=/usr/local/apache/bin/apxs 注意: --enable-fastcgi --enabl