新入職的公司需要我在公司的板卡上開發乙個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讀寫過於頻繁,進而導致查詢效率低下 那麼如何減少樹的深度 當然是不能減少查詢的資料量 乙個基本的想法...