歡迎您光臨本站 註冊首頁

發布 C 語言 CGI 開發庫 Sky CGI Lib 源碼,採用 BSD 許可證。

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

發布 C 語言 CGI 開發庫 Sky CGI Lib 源碼,採用 BSD 許可證。

------------------------------------------------------------------------------------------------

       -------- Sky CGI Lib, ver 0.01, 2007-05-13. --------
  Copyright (c) 2001-2007, sanyasky.com <[email protected]>
  All rights reserved.

  Sky CGI Lib 採用 BSD 許可證,任何人在遵守 BSD 許可協議的前提下,可以自由使用、修改、再發布。
  歡迎您指出缺點和尋找錯誤,留言和最新版下載請到 http://sanyasky.com
  BSD 許可證在本文末尾。

------------------------------------------------------------------------------------------------

一、特點

  Sky CGI Lib 是 C 語言編寫的 CGI 伺服器端開發庫,能夠在 FastCGI 模式,或者非 FastCGI 模式下,在 Apache 或者 IIS 等伺服器上穩定地開發和運行。
  使用 C 語言開發的 CGI 應用程序執行效率高,但缺點是開發速度比較慢,為避免這個缺點,Sky CGI Lib 專門設計用於 CGI 開發的數據結構和函數,並且優化一些專用於 CGI 的演算法,加上 C 語言固有的簡潔語法,使 CGI 程序的開發速度接近或部分高於傳統的 Perl 語言。
  Sky CGI Lib 的函數有六類:內存管理、輸入、處理、保存、輸出、前五類函數的支持函數。這些函數能夠只用一次調用而完成 cookie、表單、文件等 CGI 數據的解析、保存、發送,開發人員不必關心 CGI 處理的細節,只要專註於應用領域的開發,最大程度地避免重複開發,減輕開發負擔。
  Sky CGI Lib 帶有 FastCGI 開發庫和採用 BSD 許可證的 sha2 信息摘要演算法源代碼,使基於 Sky CGI Lib 開發的 CGI 程序更加高效、安全。
  Sky CGI Lib 注重可移植能力,提供在 WIN32 和 Linux 平台上相同的調用代碼,避免開發人員分心於平台的差別。
  專有的內存管理方案,使基於 Sky CGI Lib 的開發不必關注動態內存的釋放,即使運行在 FastCGI 這種常住內存的模式,每次正常或非正常結束 CGI 會話時,Sky CGI Lib 都會自動釋放應當釋放的動態內存,避免內存泄漏。
  Sky CGI Lib 的 CGI 輸入數據解析演算法經過特別優化,比作者目前尋找到的其它同類 C 演算法優化程度高,能達到某些嵌入式或大量數據傳輸等特殊 CGI 應用的要求。


二、使用方法和示例

  Sky CGI Lib 的一個簡單示常式序在這裡:
http://sanyasky.com/cgi-bin/sky/sky.cgi

  Sky CGI Lib 所有數據結構和函數的定義與功能,請參考源代碼 skycgi/src 目錄下的 skycgi.h 和 skycgi.c 文件;開發 CGI 應用程序的方法,請參考源代碼 skyapp/src 目錄下的 sky.c 文件。下面做簡略的補充說明:

  在 CGI 應用程序中,Sky CGI Lib 的函數調用先後次序應當是:
  wNewSe()、wCkTest()、wSetCookie()、wHtmHead()、wFile()、……、wTimeUsed(n)、wEndSe() 。
  其中 wNewSe()、wEndSe() 包含初始化、加鎖、解析並整理數據、解鎖、FastCGI適應性處理等功能,所以必須調用;其它函數是否調用,根據需要選擇。

  Sky CGI Lib 的 CGI 輸入數據分成三種:URL/FORM、COOKIE、上傳的文件。三種數據分別由以下三個函數查詢或保存,函數的詳細使用方法和定義請參考 skycgi.c :
void   *wForm(char *name);
void   *wCookie(char *name);
int     wFile(char *name, char *path);
  Sky CGI Lib 的數據解析、整理,由 CGI 會話開始的 wNewSe() 一次完成,不必另外手工調用其它函數,詳情請看 skycgi.c 頂部的介紹和函數定義,以及 skycgi.h 的結構聲明。

  Sky CGI Lib 的函數包括六類:內存管理、輸入、處理、保存、輸出、前五類函數的支持函數。這些函數實現完整的 CGI 處理功能,例如:解析數據、獲取客戶端真實 IP 地址、生成 session 標誌、獲取 URL 來源、URL 編解碼、URL 重定向、COOKIE 適用性測試、發送 COOKIE 、發送文件、發送 http 頭信息、發送 html 信息、發送格式化出錯信息並退出運行、數值與十六進位字元串的高效率轉換、獲取當前時刻、獲取程序運行時間長度、延時、十幾個處理文件和目錄的函數、數據暫存和恢復、單雙位元組混合字元串截取、漢字內碼轉換。
  函數庫集成的信息摘要演算法,包括 RFC 標準中的 MD5 源碼,和同樣採用 BSD 許可證的 sha-256 、sha-512 源碼。
  上述所有函數的詳細使用方法和定義請參考 skycgi.c 、skycgi.h 等文件。

  源代碼 skycgi/src 目錄下的 skytest.h 和 skytest.c 只供學習、試驗、測試使用,工程項目開發不必使用這兩個文件中的函數,也不必包含 skytest.h 。
  源代碼 skyapp/bin 目錄下的兩個 .bin 文件是 BIG5 與 GBK 內碼互轉函數的轉換數據文件,使用時與 .cgi 執行文件放在同一個目錄。

  FastCGI 的深入介紹請參考其網站:
http://fastcgi.com


三、編譯

  這個編譯簡介僅供參考,如果您熟悉 makefile 的編寫,那麼不必參考下述編譯簡介。

  作者使用 GCC 編譯器,頭文件和 makefile 按照 GCC 編寫,如果您使用其它編譯器,可能要適當地修改。

  WIN32 平台:
  作者使用 Dev-C++ ,安裝在 d:\Dev-Cpp 目錄;
  Sky CGI Lib 源碼解壓後放在 d:\webx\sky ;
  把 d:\webx\sky 目錄的 make.bat 複製到 d: 根目錄 d:\ ;
  打開命令提示符窗口(位置在:開始--所有程序--附件--命令提示符),然後轉到 d 分區根目錄,最後輸入 make 回車,自動完成編譯。
  還可以在命令提示符窗口進入 d:\webx\sky 目錄,然後執行 makesky 自動完成編譯。
  也可以不打開命令提示符窗口,只在資源管理器中直接雙擊 d:\make.bat ,或者 d:\webx\sky\makesky.bat 自動完成編譯,但缺點是中途出錯時自動關閉窗口,看不到出錯信息。
  編譯後生成的 sky.cgi 文件在 d:\webx\sky\skyapp\bin ,如果已經安裝好 Apache ,可以在 d:\webx\sky 目錄雙擊快捷方式 cgi 執行。

  Linux 平台:
  源碼解壓后,把 sky 下一層的幾個目錄的 Makefile 文件刪除,把 Makefile linux 改名為 Makefile ,然後在這幾個目錄分別打開控制台窗口,執行命令 make 。


四、WIN32 平台 Apache2 的相關安裝配製

  這個安裝配製簡介僅供參考,如果您熟悉 FastCGI 的安裝,和 Apache 的配製,那麼不必參考以下簡介。

  作者在 WIN32 平台的 Apache2 伺服器安裝在 d:\Apache 目錄。
  下載 FastCGI 的 Apache2 伺服器模塊,複製到 d:\Apache\modules 目錄。下載地址:
http://fastcgi.com/dist/mod_fastcgi-2.4.2-AP20.dll
  把 d:\webx\sky\伺服器配製文件 目錄中的 httpd.conf 複製到 d:\Apache\conf 。

  這樣以後:
  D:\webx 及其子目錄,是普通 CGI 執行目錄;
  D:\webx\sky\binfcgi 及其子目錄,是 FastCGI 執行目錄;
  D:\web 是 Apache 的文檔根目錄(DocumentRoot)。


五、計劃中的改進目標

  Sky CGI Lib 的當前版本為提高效率,輸入的 CGI 數據全部傳入內存再解析,所以此版本函數的上傳數據量限制由伺服器的內存等軟硬體情況決定,可由 config.h 中的 wInfoMaxLen 和 wMultiMaxLen 設置,建議小於 5M 。不依賴軟硬體環境的無限制版本在開發中。
  Sky CGI Lib 下一步的目標是集成正則表達式等更多的簡化開發工作的模塊。
  為加快初學者的閱讀速度,源碼特別增加一些額外的註解,註釋稍顯煩瑣,在將來版本中可能適當精簡。

------------------------------------------------------------------------------------------------
  Sky CGI Lib 歡迎您指出缺點和尋找錯誤,留言和最新版下載請到 http://sanyasky.com
------------------------------------------------------------------------------------------------


-------- Sky CGI Lib, ver 0.01, 2007-05-13. --------

Copyright (c) 2001-2007, sanyasky.com <[email protected]>
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the name of the Sky CGI Lib nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.



上述 BSD 許可協議的大略中文含義如下:

版權所有 (c) 2001-2007, sanyasky.com <[email protected]> 保留所有權力

在滿足下列條件的前提下,允許再發布經過或未經過修改的、源代碼或二進位形式的本軟體:
1.源代碼的再發布,必須保留原來代碼中的版權聲明、這幾條許可條件細目,和下面的免責聲明。
2.二進位形式的再發布,必須在隨同提供的文檔和其它媒介中,複製原來的版權聲明、這幾條許可條件細目,和下面的免責聲明。
3.如果沒有特殊的事前書面許可,原作者的組織名稱,和貢獻者名字,都不能用於支持或宣傳從既有軟體派生的產品。

此軟體由版權所有者和貢獻者以「即此」方式提供。無論明示或暗示的,包括但不限於間接的關於基於某種目的的適銷性、實用性,在此皆明示不予保證。在任何情況下,由於使用此軟體造成的,直接、間接、連帶、特別、懲戒或因此而造成的損害(包括但不限於獲得替代品及服務、無法使用、丟失數據、損失盈利或業務中斷),無論此類損害是如何造成的,基於何種責任推斷,是否屬於合同範疇,嚴格賠償責任或民事侵權行為(包括疏忽和其他原因),即使預先被告知此類損害可能發生,版權所有者和貢獻者均不承擔任何責任。

[ 本帖最後由 sanyasky 於 2007-5-17 14:15 編輯 ]
《解決方案》

能不能改成tgz壓縮的?俺現在的網路下不了.rar .zip .exe
《解決方案》

我玩C CGI/FastCGI時間也不短了,感覺這方面很難找工作的
《解決方案》

現在直接寫Web伺服器了.

你的那個makefile make.bat 寫的不好,不應該限定路徑和編譯器
我在Windows平台上的做法是添加編譯器路徑到PATH,還有添加環境變數include和lib,這樣很方便
《解決方案》

原帖由 xinglp 於 2007-5-16 10:29 發表
我玩C CGI/FastCGI時間也不短了,感覺這方面很難找工作的
現在直接寫Web伺服器了.

你的那個makefile make.bat 寫的不好,不應該限定路徑和編譯器
我在Windows平台上的做法是添加編譯器路徑到PATH,還有添加環境變數include和lib,這樣很方便


恩,C 是一把鋒利的刻刀,能用於雕琢藝術品,也能用於製造模具。CGI/FastCGI 只是一種模具的規範,只要 C 的基礎堅實,按照其它模具規範也能打造出精緻的模具,用於製造產品。所以,不要把 C 這麼好的工具限制在打造一種模具範圍內,否則就浪費了 C 。開發軟體,只要有 C ,幾乎沒有實現不了的東西,花花綠綠的世界,大部分是 C 外面的包裝。

「添加編譯器路徑到PATH,還有添加環境變數include和lib」的方法,在比較複雜的實際工程開發環境中不推薦。make.bat 也不是正確常用的方法,標準的方法是寫一個完整通用的 makefile ,為了幫助初學者理解模塊劃分的內涵,在 Sky CGI Lib 中把各個模塊的 makefile 分開了,實際工程應用中,可以比較容易地改成一個完整通用的 makefile 。
非常感謝您的指正,象您這樣專註技術的年輕人,只要放開眼光,潛力會發揮得非常好。
《解決方案》

原帖由 dajun 於 2007-5-16 10:02 發表
能不能改成tgz壓縮的?俺現在的網路下不了.rar .zip .exe
對哦,聽說 .rar 還有使用許可權制,等有時間改成 tgz 壓縮,十分感謝您提醒。

今天改成tgz壓縮,原來的x2blog不能上傳 .gz 或 .tar 文件,改到這裡下載:
http://sanyasky.cublog.cn

歡迎各位朋友繼續提出意見和建議,謝謝。

[ 本帖最後由 sanyasky 於 2007-5-17 14:12 編輯 ]
《解決方案》

Good Job.
你的全部程序拜讀了下, 想法很不錯, 很期待 sky cgi lib 的新版.

另外, 幾點建議:
1. 向流行的 asp, php, jsp 等開發工具看齊, 提供一套適於開發的工具包, 而不僅限於 cgi 庫.
    這一點, 可以參考下 CSP/eybuild. 它同樣是基於 C 的, 但它可以讓你不寫一句 C 代碼即可
   生成一套完整的應用.  並把整個 web 站點(靜態/動態/圖片/CSS等)生成到一個 CGI 文件中.
    CSP 技術使 web 程序( HTML,CSS, JS) 和 C 代碼進行有效的分離, 各司其職.

2. cgic 庫可以參考下, 也是個不錯的 cgi 的 c 庫.

Good Luck!
《解決方案》

原帖由 newzy 於 2007-5-17 14:26 發表
Good Job.
你的全部程序拜讀了下, 想法很不錯, 很期待 sky cgi lib 的新版.
另外, 幾點建議:
1. 向流行的 asp, php, jsp 等開發工具看齊, 提供一套適於開發的工具包, 而不僅限於 cgi 庫.
    這一點, 可以參 ...

遇到 newzy 專業級的讚賞和指正很高興,十分感謝。
前年也想過把 Sky CGI Lib 設計成象流行的WEB開發語言那樣,包括整套開發工具包,另外特別地設計一套用中文編程的腳本,這個腳本也用在網頁模板上。當時初步完成中文腳本語言的設計和腳本解釋器原型,功能測試的結果和設想一致,後來學習 lua 等優秀腳本語言的技術,逐步優化這套中文腳本解釋語言的時候,遇到 AJAX 逐步實用和成熟,經過深入分析,決定放棄網頁模板和中文腳本,把程序和網頁徹底分離,伺服器端和客戶端之間只傳輸數據而不是網頁。(類似 php 常用的網頁模板技術,不可避免地會在伺服器端和客戶端之間傳輸網頁,造成大量重複傳輸、降低效率、使用戶體驗變壞。網頁模板技術的開發思想和富客戶端這種技術發展趨勢不一致。)

除了內嵌於網頁,和網頁模板這兩種技術不再考慮以外,Sky CGI Lib 的整套開發工具包還應當繼續發展,請各位兄弟繼續指導。

cgic 和其它幾個 cgi 的 c 庫,對他們有過學習或大略的了解,雖然都很好,各有特色,各有或多或少的不足,都應當繼續發展,但遺憾都不是我們的同胞編寫的。Sky CGI Lib 作為中華民族一員的作品,學習別人的同時,希望得到各位同胞的更多指正。

十分感謝各位兄弟的支持和建議。

認識 newzy 很高興, newzy 非常專業。CSP/eybuild 很優秀,值得學習。


[ 本帖最後由 sanyasky 於 2007-5-19 14:46 編輯 ]
《解決方案》

我讀了樓主的代碼,很不錯。

打算深入學習下。

[火星人 ] 發布 C 語言 CGI 開發庫 Sky CGI Lib 源碼,採用 BSD 許可證。已經有385次圍觀

http://coctec.com/docs/service/show-post-37788.html