首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言 CGI 實現簡易搜索引擎:locate + shell 管道方案

     編輯:關於C語言

架構設計

  • 前端:靜態 HTML 表單提交關鍵字到 CGI 程式。
  • 後端:CGI 程式調用 locate 索引查找,sed 轉換路徑為 URL,生成結果頁面。
  • 定時任務:updatedb 更新索引,cron 清理臨時文件。

關鍵組件


/* index.html */

/* search.c 核心邏輯 */
char *data = getenv("QUERY_STRING");        // 獲取 keyname=xxx
sscanf(data, "keyname=%s", keyword);        // 簡易解析

sprintf(cmd, "locate '%s' | sed 's#^/usr/local/apache/htdocs#https://ip#' | sed 's#.*#&#' > %s", keyword, temp_file);
system(cmd);                                // 執行管道命令

/* 輸出重定向到臨時 HTML,再用 meta refresh 跳轉 */
printf("Content-Type: text/html\n");
printf("\n", temp_name);

部署步驟

  1. 編譯 gcc search.c -o search 放入 /usr/local/apache/cgi-bin/,權限 chmod 755。
  2. chown nobody:nobody /usr/local/apache/temp 確保寫入權限。
  3. /etc/cron.hourly/myupdate:updatedb -U /usr/local/apache/htdocs
  4. /etc/cron.daily/deletetemp:rm -f /usr/local/apache/temp/*

安全與改進建議

  • 命令注入風險:keyword 直接拼入 shell 命令,需嚴格過濾(僅允許字母數字下劃線)。
  • 性能:system() 開銷大,高併發下建議用 C 庫直接調用 sqlite3 或倒排索引庫。
  • 解析健壯性:使用 cgi_parse 庫正確處理 URL 編碼、多參數。
  • 現代替代:FastCGI + C/C++ 框架 或 Go/Rust 微服務。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved