<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    cgic 寫CGI程序

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    CGIC是C語言CGI庫函數,用于編寫CGI程序

    CGIC 主要完成以下功能

    * 對數據進行語法分析 

    * 接收以 GET 和 PSOT 兩種方式發送的數據 

    * 把 FORM 中的不同域連接成連續的串 

    * 為檢索 FORM 數據而提供字符串 , 整數 , 浮點以及單項和多項選擇功能 

    * 為數字字段提供邊界檢測 

    * 把 CGI 環境變量加載到非空的 C 串中 

    * 為調試而捕捉 CGI 狀態 

     

    如何寫CGIC應用程序

    任何cgic 應用程序必須連接到cgic.c,如果在Linux 下可以用Makefile 做這個工作。

    因為CGI 程序需要做一些初始化操作,如獲取環境變量,分析數據等,所以cgic 庫提供了自己的main()函數,那自己寫的cgic程序不能再包含main()函數,而必須以cgiMain()函數開始,cgic.c會調用這個函數。當然這個函數名是可以更改的.還要注意的是,自己編寫的cgic 程序必須包含#include<cigi.h>

     也就是說cgic,已經做了一些相關的解析工作,在自己的main函數中只要調用cigic 中相應的函數便可。

    以下是cigic 庫里自帶的cgic test程序的cgiMain()

     

    [cpp] view plain copy    print?
    1. int cgiMain() {  
    2. #ifdef DEBUG  
    3.   LoadEnvironment();  
    4. #endif /* DEBUG */  
    5.   /* Load a previously saved CGI scenario if that button 
    6.     has been pressed. */  
    7.   if (cgiFormSubmitClicked("loadenvironment") == cgiFormSuccess) {  
    8.     LoadEnvironment();  
    9.   }  
    10.   /* Set any new cookie requested. Must be done *before* 
    11.     outputting the content type. */  
    12.   CookieSet();  
    13.   /* Send the content type, letting the browser know this is HTML */  
    14.   cgiHeaderContentType("text/html");  
    15.   /* Top of the page */  
    16.   fprintf(cgiOut, "<HTML><HEAD>\n");  
    17.   fprintf(cgiOut, "<TITLE>cgic test</TITLE></HEAD>\n");  
    18.   fprintf(cgiOut, "<BODY><H1>cgic test</H1>\n");  
    19.   /* If a submit button has already been clicked, act on the  
    20.     submission of the form. */  
    21.   if ((cgiFormSubmitClicked("testcgic") == cgiFormSuccess) ||  
    22.     cgiFormSubmitClicked("saveenvironment") == cgiFormSuccess)  
    23.   {  
    24.     HandleSubmit();  
    25.     fprintf(cgiOut, "<hr>\n");  
    26.   }  
    27.   /* Now show the form */  
    28.   ShowForm();  
    29.   /* Finish up the page */  
    30.   fprintf(cgiOut, "</BODY></HTML>\n");  
    31.   return 0;  
    32. }  


     

    [cpp] view plain copy    print?
    1. #ifdef DEBUG  
    2.     LoadEnvironment();  
    3. #endif /* DEBUG */  


    一般采用以上方式,調用環境變量用作調試。 可以插入語句:"#define DEBUG 1 將DEBUG模式打開。

     cgiHeaderContentType("text/html") 這個函數主要是輸出Content Type Header,告訴瀏覽器返回的是一個html頁面,當然也可以是"image/gif", "image/jpeg" and "audio/wav

     

    外一點就是,cgi程序輸出HTML頁面的方式都是使用printf把頁面一行一行地打印出來,比如cgictest.c中的這一段代碼:
    fprintf(cgiOut, "<textarea NAME=\"address\" ROWS=4 COLS=40>\n");
    fprintf(cgiOut, "Default contents go here. \n");
    fprintf(cgiOut, "</textarea>\n");
    上面這段代碼的運行結果就是在頁面上輸出一個textarea。 第一個參數cgiOut實際上就是stdin,所以我們可以直接使用printf,而不必使用fprintf。不過在調試的時候會用到fprintf來重定向輸出

     

    CGI 調試起來比較麻煩,CGIC提供了一個函數可以將環境變量輸入到文件,方便調試。

     

    [cpp] view plain copy    print?
      1. cgiWriteEnvironment("/etc/conf.d/c0/capcgi.dat");  
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全