• 利用c语言编制cgi实现搜索


    1. 环境
      /usr/local/apache/htdocs/ (待检索的文件在该目录下)
      /usr/local/apache/temp/ (作为中转的文件夹)
      /usr/local/apache/cgi-bin/
      2. 将gcc search.c产生的a.out放置在/usr/local/apache/cgi-bin/中,权限设置为nobody可
      以执行。
      3. chown -R nobody.nobody /usr/local/apache/temp
      4. 在/etc/cron.daily中增加一个文件deletetemp 权限为555
      rm -f /usr/local/apache/temp/*
      5. 在/etc/cron.hourly中增加一个文件myupdate 权限为555
      updatedb -U /usr/local/apache/htdocs
      6. 删除/etc/cron.daily中的一个文件slocate.cron
      
      附录(共2条):
      1. index.htm的源码
      <html>
      <head>
      <title>Untitled Document</title>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
      </head>
      
      <body>
      <p>请输入你的查询字符串</p>
      <form name="form1" action="http://129.158.217.223/cgi-bin/a.out">
      <p> </p>
      <p>
      <input name="keyname" value="" type=text>
      </p>
      <p>
      <input type="submit" value="查询">
      </p>
      </form>
      <p> </p>
      </body>
      </html>
      
      2. search.c的源码
      #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <sys/types.h>
      #include <fcntl.h>
      
      int main(int argc, char* argv())
      {
      int fd;
      int status;
      time_t i;
      char cFileName(64);
      char cTempName(64);
      char cBuffer(1024);
      char *p = cBuffer;
      char cContent(10240);
      
      char *data;
      char keyword(1024);
      data = getenv("QUERY_STRING");
      if(data==NULL)
      {
      printf("Content-Type:text/html ");
      printf("not found!");
      exit(1);
      }
      
      sscanf(data, "keyname=%s&", keyword);
      
      p += sprintf(p, "locate '%s' | sed -e 's#^/usr/local/apache/htdocs#http://129.158.217.223#' | sed -e 's#^.*$#<a href=&>&</a>
      #' > ", keyword);
      i = time(NULL);
      
      sprintf(cTempName, "%d.html", i);
      sprintf(cFileName, "/usr/local/apache/temp/%d.html", i);
      strcat(cBuffer, cFileName);
      cBuffer(1024-1)=0;
      
      system(cBuffer);
      fd = open(cFileName, O_RDWR);
      status = read(fd, cContent, sizeof(cContent)-1);
      close(fd);
      
      printf("Content-Type:text/html ");
      printf("<meta http-equiv=refresh content=0;url="http://129.158.217.223/temp/%s"> ", cTempName);
      printf("Waiting....................... ");
      printf("%s", keyword);
      return 0;
      }

  • 相关阅读:
    Kth element of Two Sorted Arrays
    Populating Next Right Pointers in Each Node I && II
    Average waiting time of SJF and Round Robin scheduling
    LRU Cache
    Calculate H-index
    Get Level of a node in a Binary Tree
    Two Sum
    Intersection of Two Linked Lists
    Symmetric Tree
    Lowest Common Ancestor of Binary (Search) Tree
  • 原文地址:https://www.cnblogs.com/buffer/p/1415508.html
Copyright © 2020-2023  润新知