linux下CGIC CGI和BOA開發小記

2021-12-30 04:09:24 字數 3848 閱讀 5495

新入職的公司需要我在公司的板卡上開發乙個cgi網頁用於配置系統引數,減少了客戶直接配置核心檔案的複雜過程,

主要功能要包括:

1.cgi登入(只有密碼校驗),

2.配置檔案傳輸(cgi檔案傳輸)

3.開啟網頁要讀取本地檔案顯示當前配置引數

4.下拉框動態顯示當前選用的協議檔案

5.cgi網頁跳轉,即登入完成需要跳轉至系統設定頁面

做好的效果如下:

登入介面

系統配置頁面,即登入完成跳轉頁面如下:

下面詳細描述具體實現

step1:

對於boa伺服器的移植網路上有眾多文章,這裡不在贅述,只曬出boa.conf檔案供參考,boa.conf檔案位於usr/local/boa

上圖中表明了boa資料夾位置以及我們的索引網頁維index,即如果配置好了boa伺服器,如果在瀏覽器輸入開發板ip,將直接訪問usr/local/boa/index.html檔案

step2:第乙個網頁製作:登入介面

登入介面cgi程式只要捕獲伺服器發過來的密碼資料即可,然後校驗實現跳轉,html**如下:

****設計css**未上傳,上圖中採用的是get通訊,傳輸資料少於2k可用get,cgi程式如下

#include

#include

#include

int main( int argc, char *ar** )

request_method = getenv("request_method"); // trans-type.

// trans-type : get

if( ! strcmp( request_method, "get" ) )

data_len = strlen( userinput );

if( null == userinput || 0 == data_len )

userinput[data_len] = '\0';

//printf("method = %s, data_len = %d

", request_method, data_len);

//printf("data: %s", userinput);

if(!strcmp(&userinput[7],"1357"))

else

} printf("");

fflush( stdout );

return 0;

}上圖中,通過獲取通訊字串判斷具體字元,然後實現跳轉,登陸成功則跳轉至config.cgi頁面,否則提示錯誤

step3:

對於登入介面簡單的資料處理沒必要用到cgic庫,但是對於配置介面需要進行複雜資料處理的頁面,需要借助cgic庫的**

1.移植cgic庫:具體見部落格,不在贅述

我們整個配置介面需要讀取/data目錄下的config檔案,然後解析檔案中的ip,port等一系列引數顯示在網頁上,所以html是動態的,需要每次啟動瀏覽器讀取config檔案更新資料,在使用者輸入配置引數後我們需要將使用者設定資訊回寫到config檔案並且下拉列表需要動態顯示當前/data資料夾底下有多少so協議檔案,然後根據使用者操作寫入,具體流程圖如下

這一步驟全部使用cgic模擬網頁,不在使用html語言編輯網頁,具體**如下

#include

#include "cgic.h"

#include

#include

#include

#include

#define sofilenum 10

#define sofilelen 20

char ip[20]=;

char port[20]=;

char rs232[20]=;

char rs485[20]=;

char baudrate[20]=;

char lib[20]=;

char totlesofile[10][20];

char totlesonum=0;

/*find the '=' pos and get the config dat

*/static int datpos(char *dat , int index)

return i;

} else //find the *.so file

dat++;

} return 0; }}

/*find how many so file */

void getfileofso(void)

void getsofilelist(void)

while (!feof(fd))

else

} fclose(fd);

}/*when open html we should read configfile to fix it*/

void readtandaconf(void)

while (!feof(fd))

else

if(strline[0]=='p'&&strline[1]=='o')

if(strline[2]=='2'&&strline[3]=='3')

if(strline[2]=='4'&&strline[3]=='8')

if(strline[0]=='b'&&strline[1]=='a')

if(strline[0]=='p'&&strline[1]=='r')}}

fclose(fd); }

void writeconfdat(void){

file *fd;

int sochoice;

int i;

cgiformstringnonewlines("ip", ip, sizeof(ip));

cgiformstringnonewlines("port", port, sizeof(port));

cgiformstringnonewlines("rs232port", rs232, sizeof(rs232));

cgiformstringnonewlines("rs485port", rs485, sizeof(rs485));

cgiformstringnonewlines("baudrate", baudrate, sizeof(baudrate));

getsofilelist();

cgiformselectsingle("net", totlesofile, totlesonum, &sochoice, 0);

fd=fopen("/data/tanda.conf" ,"w");

if(fd)

{

fputs("###################################\n",fd);

fputs("# tanda adapter config file #\n",fd);

fputs("###################################\n\n",fd);

fputs("#鏈嶅姟絝酸p鎴栬

B樹(或B 樹)和B 樹和B 樹

樹的深度過大而造成磁碟i o讀寫過於頻繁,進而導致查詢效率低下 根據平衡二叉樹的啟發,自然就想到平衡多路查詢樹結構,即b樹結構 後面,我們將看到,b樹的各種操作能使b樹保持較低的高度,從而達到有效避免磁碟過於頻繁的查詢訪問操作,從而有效提高查詢效率 為什麼說b tree比b 樹更適合實際應用中作業系...

B樹 B 樹和B 樹

一 b樹的查詢是在內部節點進行的,節點處存放了節點的所有資訊,即相當於存放的是乙個node。二 b 樹的查詢最終會在外部節點,或者稱為葉子節點,而內部節點不存放node,只存放node的索引,最終能夠在葉子節點處找到乙個指向該node的指標,從而結束查詢。b 樹的另乙個特點是在葉子節點中存放的所有n...

B樹 B 樹和B 樹

參考 大規模資料儲存中,實現索引查詢這樣乙個實際背景下,樹節點儲存的元素數量是有限的 如果元素數量非常多的話,查詢就退化成節點內部的線性查詢了 這樣導致二叉查詢樹結構由於 樹的深度過大而造成磁碟i o讀寫過於頻繁,進而導致查詢效率低下 那麼如何減少樹的深度 當然是不能減少查詢的資料量 乙個基本的想法...