九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
boa資料匯總
boa 移植文檔(2011-08-04 20:36:12)

 
boa 版本:
www.boa.org下載的Boa源碼:boa-0.94.13.tar.gz
操作系統(tǒng)平臺:

Linux —— Fedora8

交叉編譯器版本:

arm-vfp-linux-gnu-gcc

開發(fā)板平臺:

YL-3250

 

<一>在x86平臺上的移植

一>   編譯boa程序

1、下載源碼程序boa-0.94.13.tar.gz

2、解壓 #tar xzf boa-0.94.13.tar.gz

3、進入boa的源代碼目錄

      #cd boa-0.94.13/src

      4、配置

#./configure

5、編譯

#make

用2.95.3以上的版本編譯時會出錯:

util.c:100:1: 錯誤:毗連“t”和“->”不能給出一個有效的預處理標識符

make: *** [util.o] 錯誤 1(中文版本)

util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token

make:*** [util.o] Error 1(English version)

解決方法:

修改本目錄下compat.h中的

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

為:

#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

再次編譯,通過,會在當前目錄(boa-0.94.13/src)下生成可執(zhí)行文件boa。

二>   配置boa

1、在/etc下建立boa目錄,并復制/boa-0.94.13/boa.conf到/etc/boa目錄下,因為在/src/defines.h源碼中,宏SERVER_ROOT定義了服務器的根目錄,如下:

      

#ifndef SERVER_ROOT

#define SERVER_ROOT "/etc/boa"

#endif

當然也可以在運行命令時使用-c來指定根目錄。

      2、修改/etc/boa.conf

      修改訪問權(quán)限:      修改User nobody

為  User 0

                                         修改Group nogroup

為  Group 0

      修改cgi程序目錄:修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/     

為  ScriptAlias /cgi-bin/ /var/www/cgi-bin/

3、設(shè)定日志目錄:boa日志有兩部分,ErrorLog和AccessLog,可根據(jù)自己情況設(shè)置日志目錄,也可以選擇默認值:

      ErrorLog /var/log/boa/error_log

      AccessLog /var/log/boa/access_log

 

下面是從網(wǎng)上找到的配置說明,其實就是boa.conf的中文翻譯而已。

Port:boa服務器監(jiān)聽的端口,默認的端口是80。如果端口小于1024,則必須是 root用戶啟動服務器。

Listen:綁定的ip地址。不使用這個參數(shù)時,將綁定所有的地址。

User:連接到服務器的客戶端的身份,可以是用戶名或UID。

Group:連接到服務器的客戶端的組,可以是組名或GID。

ServerAdmin:服務器出故障時要通知的郵箱地址。

ErrorLog:指定錯誤日志文件。如果路徑?jīng)]有以"/"開始,則相對于ServerRoot路徑。沒有配置時默認的文件是/dev/stderr。若不想記錄日志,指定文件為/dev/null。

AccessLog:設(shè)置存取日志文件,與ErrorLog類似。

UseLocaltime:設(shè)置使用本地時間,使用UTC時注釋這個參數(shù)。這個參數(shù)沒有值。

VerboseCGILogs:在錯誤日志文件中記錄CGI啟動和停止時間,若不記錄,注釋這個參數(shù)。這個參數(shù)沒有值。

ServerName:指定服務器的名稱,當客戶端使用gethostname + gethostbyname時返回給客戶端。

VirtualHost:虛擬主機開關(guān)。使用此參數(shù),則會在DocumentRoot設(shè)定的

目錄添加一個ip地址作為新的DocumentRoot來

處理客戶端的請求。如DocumentRoot設(shè)置為/var/www,則http://localhost/轉(zhuǎn)換成/var/www/127.0.0.1/,若注釋此參數(shù),則為/var/www/。

DocumentRoot:HTML文件的根目錄(也就是網(wǎng)站的目錄)。

UserDir:指定用戶目錄。

DirectoryIndex:指定預生成目錄信息的文件,注釋此變量將使用DirectoryMaker變量。這個變量也就是設(shè)置默認主頁的文件名。

DirectoryMaker:指定用于生成目錄的程序,注釋此變量將不允許列目錄。

DirectoryCache:當DirectoryIndex文件不存在,而DirecotryMaker又被注釋掉時,將列出這個參數(shù)指定目錄給客戶端。

KeepAliveMax:每個連接允許的請求數(shù)量。如果將此值設(shè)為" 0 ",將不限制請求的數(shù)目。

KeepAliveTimeOut:在關(guān)閉持久連接前等待下一個請求的秒數(shù)。(秒)。

MimeTypes:設(shè)置包含mimetypes信息的文件,一般是/etc/mime.types。

DefaultType:默認的mimetype類型,一般是text/html。

CGIPath:相當于給CGI程序使用的$PATH變量。

SinglePostLimit:一次POST允許最大的字節(jié)數(shù),默認是1MB。

AddType: 增加MimeType沒有指定的類型,例: AddType type extension [extension ...]。要使用cgi,必須添加cgi類型:AddType application/x-httpd-cgi cgi

Redirect:重定向文件。

Aliases:指定路徑的別名。

ScriptAlias:指定腳本路徑的虛擬路徑。

4、根據(jù)boa.conf建立相應目錄

      /var/log/boa                                  用來存放日志文件

      /var/log/boa/error_log          日志文件

      /var/log/boa/access_log      日志文件

      /var/www                         html文件目錄

并在其中存放html文件(包括默認主頁index.html)

      /var/www/cgi-bin                  cgi腳本目錄

注意:這里/var/log/boa目錄必須為可寫,否則會出現(xiàn)錯誤:log.c:73 – Unable to dup2 the error log: Bad file r.)

5、關(guān)閉其它Web服務器

      在啟動boa之前,還要確保Linux中其它的Web服務器已經(jīng)關(guān)閉,比如httpd。

      關(guān)閉httpd:/etc/init.d/httpd stop

6、啟動boa

      在src目錄下執(zhí)行./boa。也可以將可執(zhí)行文件boa復制到/user/bin目錄下或是其他PATH,然后直接在終端輸入boa即可。

      運行boa后查看進程 #ps –a|grep boa應該可以看到boa正在運行

(使用普通用戶無法啟動boa,提示錯誤:[03/Aug/2011:09:04:45 +0000] log.c:73 - unable to dup2 the error log: Bad file descriptor)

 

若ps中沒有看到boa進程,說明boa沒有成功啟動

查看/var/log/boa/error_log顯示:

[03/Aug/2011:00:46:33 +0000] boa.c:226 - icky Linux kernel bug!: Success

解決方法:將boa.c中的以下內(nèi)容注釋掉
if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}
---------->

重新make

7、將Windows與虛擬機的IP設(shè)在一個網(wǎng)段,在Windows瀏覽器中輸入linux的IP地址,即可進入首頁,即/var/www/index.html。

      編寫helloworld.c,使用gcc編譯為helloworld.cgi

      gcc –o helloworld.cgi helloworld.c生成helloworld.cgi

      在瀏覽器地址中輸入:http://192.168.7.17/cgi-bin/helloworld.cgi進入helloworld.cgi

<二>移植到開發(fā)板

一>修改Makefile文件:

1、將:CC = gcc

       CPP = gcc –E

改為:

       CC = /opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-gcc

       CPP = /opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-gcc –E

注:根據(jù)安裝的交叉編譯工具進行更改

2、#make                                            編譯

  #arm-vfp-linux-gnu-strip boa            去掉調(diào)試信息,減少boa體積

二>拷貝虛擬機下/etc/mime.types文件到開發(fā)板/etc目錄下

開發(fā)板上根據(jù)boa配置文件建立相關(guān)文件(夾)同X86中二>配置boa

4

將可執(zhí)行文件boa復制到開發(fā)板,并運行~

在Windows瀏覽器地址欄中輸入開發(fā)板地址進行測試。

 

在板子上運行出現(xiàn)這個問題gethostbyname:: Resource temporarily unavailable。

解決方法:把src文件夾下的config.c里的if(!server_name){..........}(大概在266行到286行之間)注釋掉,就能運行在板子上運行boa。

附錄:

常見錯誤

這些錯誤內(nèi)容可查看/var/log/boa/error_log文件

1>. 錯誤1: gethostbyname:: No such file or directory

解決辦法: 修改boa.conf  去掉 ServerName www.your.org.here 前的注釋符號(#)

2>. 錯誤1: util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o]

解決辦法: 修改 src/compat.h

找到

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

3>. 錯誤2: boa.c:211 - getpwuid: No such file or directory

解決辦法: 修改src/boa.c

注釋掉下面這段程序:

if (passwdbuf == NULL) {

 DIE(”getpwuid”);

 }

if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

DIE(”initgroups”);

}

即修改為:

#if 0

if (passwdbuf == NULL) {

DIE(”getpwuid”);

}

if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

DIE(”initgroups”);

}

#endif

4>. 錯誤3: boa.c:228 - icky Linux kernel bug!: No such file or directory

解決辦法: 修改src/boa.c

注釋掉下面語句:

if (setuid(0) != -1) {

DIE(”icky Linux kernel bug!”);

}

即修改為:

#if 0

if (setuid(0) != -1) {

DIE(”icky Linux kernel bug!”);

}

#endif

5>. 錯誤4: log.c:73 unable to dup2 the error log:bad file descriptor

解決方法:

方法1> 確定日志目錄對與所有用戶都具有可讀/寫的權(quán)限

方法2> 修改src/log.c (建議采用方法1)

注釋掉

if (dup2(error_log, STDERR_FILENO) == -1) {

DIE("unable to dup2 the error log");

}

即修改為:

#if 0

if (dup2(error_log, STDERR_FILENO) == -1) {

DIE("unable to dup2 the error log");

}

#endif

 

參考網(wǎng)址:http://www.linuxidc.com/Linux/2011-03/33485.htm

http://hi.baidu.com/??x??/blog/item/63118b3d8b9f4fe63b87ce1f.html


 


 


http://blog.sina.com.cn/s/blog_b4ed6f2f0101d0b7.html

boa測試實例

 

前面的文章里講了如何安裝、配置boa,這篇文章主要講一下一些boa測試實例,主要涉及到html以及cgi程序的編寫。

測試環(huán)境:
虛擬機(虛擬機軟件為VMware)Fedora(以下與Linux為同義詞),Linux的IP為192.168.184.100,通過VMnet8方式與物理機MS Windows連接,使用常用瀏覽器訪問,如IE、Maxthon、Chrome等。

html不用介紹了。cgi全稱為Common Gate Interface,它不是一種具體的語言,它可以使用其它語言來實現(xiàn),比如C、C++、Perl、shell,等等。我們使用C語言來編寫cgi程序。

我們需要使用到兩個文件,一個是用于頁面顯示的使用html語言編寫的hello.html,該文件放到/var/www/html目錄中。另一個是用于響應該頁面的cgi程序hello.c,該程序使用C語言編寫,編譯方式為:

$ gcc hello.c –o hello.cgi

編譯后的可執(zhí)行文件hello.cgi放到/var/www/cgi-bin目錄中

完整的hello.html如下:







this is  is simple test of HTML



hello from Late Lee



you can visit my website at www.latelee.org





  
   
      
      
      user name
      
      

      
        password
        
      
      
      
        
        
      
    

  




這個html文件分兩部分,前半部分是一些常見的頁面顯示語句,這里包括了標題、圖片顯示、超鏈接。后半部分是我們真正的測試程序,主要設(shè)計了兩個輸入框,分別輸入用戶名和密碼;兩個按鈕,分別是登陸和清除,這里的“登陸”并非實際中的登陸,它只是測試cgi程序的響應,結(jié)果是顯示輸入的信息。
注意到這一句:

它的action表明了由哪一個cgi程序來響應來自該頁面的消息,而method為http響應的方法,常用的有兩種,分別是“post”和“get”,這里非專業(yè)地介紹一下。post,顧名思義,就是“提交”,用于更新信息;而get,即“獲取”,用于從服務器中獲取、查詢信息。在下文將會看到,這兩者在地址欄中的區(qū)別,使用post方法時數(shù)據(jù)是不會在地址欄中顯示的,而get方法則會顯示。不過本文不介紹這兩者的本質(zhì)區(qū)別。

如果直接輸入Linux的IP地址,則會顯示Fedora Project的啟動頁面,而要訪問我們的測試網(wǎng)頁,還需要再添加一些目錄才行。這里的實際地址應該是:
http://192.168.184.100/html/hello.html
當然,IP地址需要根據(jù)實際情況而改變。

下面是響應的cgi程序hello.c完整代碼:

#include 
#include 
#include 

char* get_cgi_data(FILE* fp, char* method)
{
    char* input;
    int len;
    int size=1024;
    int i=0;

    if (strcmp(method, "GET") == 0)  
    {
        input getenv("QUERY_STRING");
        return input;
    }

    else if (strcmp(method, "POST") == 0)  
    {
        len atoi(getenv("CONTENT_LENGTH"));
        input (char*)malloc(sizeof(char) (size+1));

        if (len == 0)
        {
            input[0] '\0';
            return input;
        }

        while (1)
        {
            input[i] (char)fgetc(fp);
            if (i == size)
            {
                input[i+1] '\0';
                return input;
            }
            --len;

            if (feof(fp) || (!(len)))
            {
                i++;
                input[i] '\0';
                return input;
            }
            i++;
        }
    }
    return NULL;
}

int main(void)
{
    char* input;
    char* method;
    char name[64];
    char passwd[64];
    int i=0;
    int j=0;

    printf("Content-type:text/html\n\n");
    printf("The following is query result:");
    method getenv("REQUEST_METHOD");
    input get_cgi_data(stdin, method);

    printf("string is: %s", input);
    int len strlen(input);
     
    for (i=9; i
           
        if (input[i] == '&')
        {
            name[j]='\0';
            break;
        }
        
        name[j++]=input[i];
    }

     
    for (i=19+strlen(name),j=0; i<(int)strlen(input); i++)
    {
        passwd[j++] input[i];
    }
    passwd[j]='\0';

    printf("your username is %s your password is %s\n", name, passwd);

    return 0;
}

這里不討論代碼的邏輯、風格等問題。
這個程序功能十分簡單,就是打印獲取到的請求字符串以及用戶名稱和密碼。該程序與普通的C語言程序并無區(qū)別,只是多了我們不常用的getenv函數(shù),它在stdlib.h頭文件中聲明,作用是獲取指定的環(huán)境變量的值,比如我的系統(tǒng)中HOME這個環(huán)境變量值為/home/latelee/,則該函數(shù)返回指向這個值的指針。這里出現(xiàn)了QUERY_STRING,這是boa特有的環(huán)境變量,從字面上理解為“請求字符串”,我們打印了這個變量的值,也從該字符串中分析得到用戶名和密碼,下面將會看到。
在boa源代碼目錄下的examples目錄中有一個cgi程序:cgi-test.cgi,它使用perl語言編寫。將它復制到/var/www/cgi-bin目錄中,在瀏覽器輸入其地址:
http://192.168.184.100/cgi-bin/cgi-test.cgi
則顯示下面的cgi測試程序:

Boa CGI test
Date: Thu Jan 27 13:45:19 CST 2011 
Method: GET 
Basic GET Form:

Basic POST Form:
   
Sample ISINDEX form:
/cgi-bin/cgi-test.cgi?param1+param2+param3 Query String: 
Arguments: 
Environment: 
· SCRIPT_NAME = /cgi-bin/cgi-test.cgi 
· SERVER_NAME = FightNow 
· HTTP_ACCEPT_ENCODING = gzip, deflate 
· SERVER_ADMIN = 
· REQUEST_METHOD = GET 
· SERVER_SOFTWARE = Boa/0.94.13 
· REMOTE_PORT = 3892 
· HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR

2.0.50727) 
· SERVER_PORT = 80 
· HTTP_ACCEPT_LANGUAGE = zh-cn 
· REMOTE_ADDR = 192.168.184.1 
· SERVER_PROTOCOL = HTTP/1.1 
· PATH = /bin:/usr/bin:/usr/local/bin 
· GATEWAY_INTERFACE = CGI/1.1 
· REQUEST_URI = /cgi-bin/cgi-test.cgi 
· SERVER_ADDR = 192.168.184.100 
· HTTP_HOST = 192.168.184.100 
No input stream: (not POST) 
id: uid=99(nobody) gid=0(root) groups=99(nobody) 
Boa http server

這里我們看到許多的環(huán)境變量以及它們的值,它們可以直接使用getenv函數(shù)獲取。QUERY_STRING是客戶端提交的數(shù)據(jù),這些數(shù)據(jù)在傳輸過程中是經(jīng)過了編碼的,因此,要正確顯示它們,必須進行解碼。

  • 表單中每個字段用字段名后跟等號,再接上這個字段的值來表示,每個字段之間的內(nèi)容用“&”連結(jié),前面的程序就是依據(jù)“&”進行判斷用戶名和密碼的。
  • 空格符號用加號(“+”)代替,而其它的特殊字符,如“!”、“#”等,使用百分號(“%”)加對應的ASCII碼來表示。漢字也是這樣表示。

下面是頁面顯示的效果圖:

當輸入用戶名和密碼分別輸入latelee和latelee.org提交后,將出現(xiàn)如下提示信息:

The following is query result:

string is: Username=latelee&Password=latelee.org
your username is latelee
your password is latelee.org

 可見,程序正確解析出了用戶名和密碼,不過當字段值有空格時,則顯示:

The following is query result:

string is: Username=Late+Lee&Password=Late+Lee
your username is Late+Lee
your password is Late+Lee

可以看到,還沒正確解析出空格(我不知道在字段值中出現(xiàn)空格本身就是是非法的還是程序的問題)。

當cgi程序采用get方法時,地址欄的變化為:

http://192.168.184.100/cgi-bin/hello.cgi?Username=latelee&Password=latelee.org

而采用post方法時,地址欄為:

http://192.168.184.100/cgi-bin/hello.cgi

未盡事宜:中文解析還沒有完成,當用戶名為“李遲”時,顯示如下:

The following is query result:

string is: Username=???&Password=123
your username is ???
your password is 123


 


 

http://canlynet.blog.163.com/blog/static/25501365200911252756635/

boa webserver 的安裝配置和使用  

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
boa webserver 是一個小巧高效的web服務器,是一個運行于unix或linux下的,支持cgi的、非常適合于嵌入式系統(tǒng)的單任務的http服務器,源代碼開放、性能高。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Linux版本:Ubuntu 7.04
arm gcc版本:3.4.5
boa版本:
boa-0.94.13.tar.tar
下載地址:
http://www.boa.org/boa-0.94.13.tar.gz

 

****************************************************
摘自:
http://blog.chinaunix.net/u1/33226/showart_485155.html
****************************************************

隨著Internet技術(shù)的興起,在嵌入式設(shè)備的管理與交互中,基于Web方式的應用成為目前的主流,這種程序結(jié)構(gòu)也就是大家非常熟悉的B/S結(jié)構(gòu),即在 嵌入式設(shè)備上運行一個支持腳本或CGI功能的Web服務器,能夠生成動態(tài)頁面,在用戶端只需要通過Web瀏覽器就可以對嵌入式設(shè)備進行管理和監(jiān)控,非常方 便實用。
--------------------------------------------------------------------------------------------------
本節(jié)主要介紹這種應用的開發(fā)和移植工作。
用戶首先需要在嵌入式設(shè)備上成功移植支持腳本或CGI功能的Web服務器,然后才能進行應用程序的開發(fā)。
1、 嵌入式Web服務器移植  由于嵌入式設(shè)備資源一般都比較有限,并且也不需要能同時處理很多用戶的請求,因此不會使用Linux下最常用的如Apache 等服務器,而需要使用一些專門為嵌入式設(shè)備設(shè)計的Web服務器,這些Web服務器在存貯空間和運行時所占有的內(nèi)存空間上都會非常適合于嵌入式應用場合。
典型的嵌入式Web服務器有Boa (
www.boa.org)和thttpd (http://www.acme.com/software/thttpd/)等,它們和Apache等高性能的Web服務器主要的區(qū)別在于它們一般是 單進程服務器,只有在完成一個用戶請求后才能響應另一個用戶的請求,而無法并發(fā)響應,但這在嵌入式設(shè)備的應用場合里已經(jīng)足夠了。
-------------------------------------------------------------------------------------------------
我們紹比較常用的Boa服務器的移植。

Boa是一個非常小巧的Web服務器,可執(zhí)行代碼只有約60KB。它是一個單任務Web服務器,只能依次完成用戶的請求,而不會fork出新的進程來處理 并發(fā)連接請求。但Boa支持CGI,能夠為CGI程序fork出一個進程來執(zhí)行。Boa的設(shè)計目標是速度和安全,在其站點公布的性能測試中,Boa的性能 要好于Apache服務器。

【第一步】完成Boa程序的移植。從www.boa.org下載Boa源碼,當前最新版本為0.94.13,將其解壓并進入源碼目錄的src子目錄。

    # tar xzf boa-0.94.13.tar.gz
    # cd boa-0.94.13/src
生成Makefile文件
    # ./configure
    修改Makefile文件,找到CC=gcc,將其改成CC = arm-linux-gcc( arm-linux-gcc是3.3.2版的arm gcc編譯器,如果是3.4.5版本的gcc用:arm-softfloat-linux-gnu-gcc,當使用該版本,本文其余地方都如此更改),再找到CPP = gcc –E,將其改成CPP = arm-linux-gcc –E,并保存退出。
    然后運行make進行編譯,得到的可執(zhí)行程序為boa,將調(diào)試信息剝?nèi)ィ玫降淖詈蟪绦蛑挥屑s60KB大小。
    # make
    # arm-linux-strip boa
--------------------------------------strip的作用-----------------------------------
linux@farsight:~/project/boa-0.94.13/src$ ls boa -l -h
-rwxr-xr-x 1 linux linux 184K 2009-12-11 10:50 boa
linux@farsight:~/project/boa-0.94.13/src$ arm-softfloat-linux-gnu-strip boa
linux@farsight:~/project/boa-0.94.13/src$ ls -l boa -h
-rwxr-xr-x 1 linux linux 60K 2009-12-11 10:58 boa
---------------------------------------------------------------------------------------

 

出錯處理:
錯誤3:
        錯誤信息:
  debian:/home/a/sss/boa-0.94.13/src# make
  gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c
  util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token
  make: *** [util.o] Error 1

  解決方法:
       查找預編譯出錯的那個宏:
        grep TIMEZONE_OFFSET ./ -r
        ./compat.h:#define TIMEZONE_OFFSET(foo) ##foo->tm_gmtoff
        ./compat.h:#define TIMEZONE_OFFSET(foo) timezone
        ./util.c:        time_offset = TIMEZONE_OFFSET(t);
        我們可以看到查出的第一行##顯然是錯誤輸入!
  修改 src/compat.h
  找到
  #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
  修改成
  #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff


【第二步】完成Boa的配置,使其能夠支持CGI程序的執(zhí)行。Boa需要在/etc目錄下建立一個boa目錄,里面放入Boa的主要配置文件boa.conf。在Boa源碼目錄下已有一個示例boa.conf,可以在其基礎(chǔ)上進行修改,下面解釋一下該文件的含義:

#監(jiān)聽的端口號,缺省都是80,一般無需修改
Port 80
# bind調(diào)用的IP地址,一般注釋掉,表明綁定到INADDR_ANY,通配于服務器的所有IP地址
#Listen 192.68.0.5
#作為哪個用戶運行,即它擁有該用戶的權(quán)限,一般都是nobody(linux默認有),需要/etc/passwd中有
#nobody用戶
User nobody
#作為哪個用戶組運行,即它擁有該用戶組的權(quán)限,一般都是nogroup(linux默認有),需要在/etc/group文
#件中有nogroup組
Group nogroup
#當服務器發(fā)生問題時發(fā)送報警的email地址,目前未用,注釋掉
#ServerAdmin
root@localhost
#錯誤日志文件。如果沒有以/開始,則表示從服務器的根路徑開始。如果不需要錯誤日志,
則用#/dev/null。在下面設(shè)置時,注意一定要建立/var/log/boa目錄
ErrorLog /var/log/boa/error_log
#訪問日志文件。如果沒有以/開始,則表示從服務器的根路徑開始。如果不需要錯誤日志,
則用#/dev/null或直接注釋掉。在下面設(shè)置時,注意一定要建立/var/log/boa目錄
#AccessLog /var/log/boa/access_log
#是否使用本地時間。如果沒有注釋掉,則使用本地時間。注釋掉則使用UTC時間【這個注釋需要解開】
#UseLocaltime
#是否記錄CGI運行信息,如果沒有注釋掉,則記錄,注釋掉則不記錄
#VerboseCGILogs
#服務器名字【這個需要根據(jù)域名更改名字】
ServerName
www.hyesco.com
#是否啟動虛擬主機功能,即設(shè)備可以有多個網(wǎng)絡接口,每個接口都可以擁有一個虛擬的Web服
#務器。一般注釋掉,即不需要啟動
#VirtualHost
#非常重要,HTML文檔的主目錄。如果沒有以/開始,則表示從服務器的根路徑開始。
DocumentRoot /var/www
#如果收到一個用戶請求的話,在用戶主目錄后再增加的目錄名
UserDir public_html
#HTML目錄索引的文件名,也是用戶沒有指定訪問目錄時返回的文件名
DirectoryIndex index.html
#當HTML目錄沒有索引文件時,用戶只指明訪問目錄時,boa會調(diào)用該程序生成索引文件然后
#返回給用戶,因為該過程比較慢最好不執(zhí)行,可以注釋掉或者給每個HTML目錄加上#DirectoryIndex指明的文件
#DirectoryMaker /usr/lib/boa/boa_indexer
#如果DirectoryIndex不存在,并且DirectoryMaker被注釋,那么就用Boa自帶的索引
#生成程序來生成目錄的索引文件并輸出到下面目錄,該目錄必須是Boa能讀寫
# DirectoryCache /var/spool/boa/dircache
#一個連接所允許的HTTP持續(xù)作用請求最大數(shù)目,注釋或設(shè)為0都將關(guān)閉HTTP持續(xù)作用
KeepAliveMax 1000
#HTTP持續(xù)作用中服務器在兩次請求之間等待的時間數(shù),以秒為單位,超時將關(guān)閉連接
KeepAliveTimeout 10
#指明mime.types文件位置。如果沒有以/開始,則表示從服務器的根路徑開始??梢宰⑨尩?br style="FONT-FAMILY: ">#避免使用mime.types文件,此時需要用AddType在本文件里指明
MimeTypes /etc/mime.types
#文件擴展名沒有或未知的話,使用的缺省MIME類型
DefaultType text/plain
#提供CGI程序的PATH環(huán)境變量值
CGIPath /bin:/usr/bin:/usr/local/bin
#將文件擴展名和MIME類型關(guān)聯(lián)起來,和mime.types文件作用一樣。如果用mime.types
#文件,則注釋掉,如果不使用mime.types文件,則必須使用
#AddType application/x-httpd-cgi cgi
#指明文檔重定向路徑
#Redirect /bar
http://elsewhere/feh/bar
#為路徑加上別名
Alias /doc /usr/doc
#非常重要,指明CGI腳本的虛擬路徑對應的實際路徑。一般所有的CGI腳本都要放在實際路徑
#里,用戶訪問執(zhí)行時輸入站點+虛擬路徑+CGI腳本名【以下代碼需要對比更改好!我為這句話沒有更改查詢了近1小時?。。。。。。。。?!】
ScriptAlias /cgi-bin/ /var/www/cgi-bin/

用戶可以根據(jù)自己需要,對boa.conf進行修改,但必須要保證其他的輔助文件和設(shè)置必須和boa.conf里的配置相符,不然Boa就不能正常工作。 在上面的例子中,我們還需要創(chuàng)建日志文件所在目錄/var/log/boa,創(chuàng)建HTML文檔的主目錄/var/www,將mime.types文件拷貝 到/etc目錄,創(chuàng)建CGI腳本所在目錄/var/www/cgi-bin/。mime.types文件用來指明不同文件擴展名對應的MIME類型,一般 可以直接從Linux主機上拷貝一個,大部分也都是在主機的/etc目錄下。


===================host test=======================================
1.進入 boa-0.94.13/src
 ./configure
 make
2.在etc/下建立boa目錄并將boa.conf拷貝到該目錄下.更改boa.conf
3.在 /var/log/下建立boa目錄,該目錄下可以查看boa服務器的日志。
4.其它的一些路徑
默認是/var/www下的內(nèi)容可以訪問                       (DocumentRoot /var/www)
默認cgi :ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/  (cgi可執(zhí)行程序放在 /usr/lib/cgi-bin/目錄下)
 例子
http://201.201.201.249/cgi-bin/cgi-test.cgi
CGIPath /bin:/usr/bin:/usr/local/bin
只有這些目錄下的命令可以被調(diào)用,如果要root的權(quán)限(如ifconfig配置ip)需要加上/sbin
5.將下面的cig例子中pass.c復制到記事本中存為pass.c,編譯成pass,去除調(diào)試信息(strip),保存到www/cgi-bin/目錄下。pass.html復制到記事本中存為pass.html。拷貝到/var/www目錄下(注意如果用開發(fā)板,拷貝到相應文件系統(tǒng)的/var/www目錄下)。
6.開發(fā)板上沒有nobody用戶,沒有nogroup用戶組,需要自行建立(建立nobody用戶時會提示出錯信息說沒有/home/nobody目錄,不必理會,因為我們不是用這個用戶登錄系統(tǒng))。
#adduser nobody
#addgroup nogroup
7.拷貝boa可執(zhí)行程序到文件系統(tǒng)的相應目錄下。比如自行建立/boawebserver目錄。運行./boa
8.windows中打開瀏覽器輸入:192.168.1.10/pass.html,輸入任意用戶名和密碼,登錄后出現(xiàn)反饋信息即為成功。


=====================================================================
cgi例子
=====================================================================

/*********pass.c************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* getcgidata(FILE* fp, char* requestmethod);
int main()
{
       char *input;
       char *req_method;
       char name[64];
       char pass[64];
       int i = 0;
       int j = 0;
      
//     printf("Content-type: text/plain; charset=iso-8859-1\n\n");
       printf("Content-type: text/html\n\n");
       printf("The following is query reuslt:<br><br>");

       req_method = getenv("REQUEST_METHOD");
       input = getcgidata(stdin, req_method);

       // 我們獲取的input字符串可能像如下的形式
       // Username="admin"&Password="aaaaa"
       // 其中"Username="和"&Password="都是固定的
       // 而"admin"和"aaaaa"都是變化的,也是我們要獲取的
      
       // 前面9個字符是UserName=
       // 在"UserName="和"&"之間的是我們要取出來的用戶名
       for ( i = 9; i < (int)strlen(input); i++ )
       {
              if ( input[i] == '&' )
              {
                     name[j] = '\0';
                     break;
              }                  
              name[j++] = input[i];
       }

       // 前面9個字符 + "&Password="10個字符 + Username的字符數(shù)
       // 是我們不要的,故省略掉,不拷貝
       for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ )
       {
              pass[j++] = input[i];
       }
       pass[j] = '\0';

       printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);
      
       return 0;
}

char* getcgidata(FILE* fp, char* requestmethod)
{
       char* input;
       int len;
       int size = 1024;
       int i = 0;
      
       if (!strcmp(requestmethod, "GET"))
       { //從這里可以看出來,GET在cgi中傳遞的Username="admin"&Password="aaaaa"被放置在環(huán)境變量QUERY_STRING中了。
              input = getenv("QUERY_STRING");
              return input;
       }
       else if (!strcmp(requestmethod, "POST"))
       {
              len = atoi(getenv("CONTENT_LENGTH"));
              input = (char*)malloc(sizeof(char)*(size + 1));
             
              if (len == 0)
              {
                     input[0] = '\0';
                     return input;
              }
             
              while(1)
              { //從這里可以看出來,POST在cgi中傳遞的Username="admin"&Password="aaaaa"被寫入stdin標準輸入流中了。
                     input[i] = (char)fgetc(fp);
                     if (i == size)
                     {
                            input[i+1] = '\0';
                            return input;
                     }
                    
                     --len;
                     if (feof(fp) || (!(len)))
                     {
                            i++;
                            input[i] = '\0';
                            return input;
                     }
                     i++;
                    
              }
       }
       return NULL;
}
 
/*
*  gcc -o pass.cgi pass.c
*/

<!--pass.html-->
<html>
<head><title>用戶登陸驗證</title></head>
<body>
<!--下面的action是表單提交后在服務器端執(zhí)行的gic程序(即c的可執(zhí)行程序)-->
<!--cgi可執(zhí)行程序放在 /usr/lib/cgi-bin/目錄下-->
<form name="form1" action="/cgi-bin/pass.cgi" method="POST">
<table align="center">
    <tr><td align="center" colspan="2"></td></tr>
    <tr>
       <td align="right">用戶名</td>
       <td><input type="text" name="Username"></td>
    </tr>
    <tr>
       <td align="right">密  碼</td>
       <td><input type="password" name="Password"></td>
    </tr>
    <tr>
       <td><input type="submit" value="登  錄"></td>
       <td><input type="reset" value="取  消"></td>
    </tr>
</table>
</form>
</body>
</html>


****************************************************
摘自:
http://blog.chinaunix.net/u1/33226/showart_485155.html
****************************************************

 


****************************************************
摘自:
http://hi.baidu.com/jiaolingqi/blog/item/3fb63a9ba776cdb4c9eaf4b5.html
****************************************************

C語言提供了幾個標準庫函數(shù),可以將任意類型(整型、長整型、浮點型等)的數(shù)字轉(zhuǎn)換為字符串。以下是用itoa()函數(shù)將整數(shù)轉(zhuǎn) 換為字符串的一個例子:

# include <stdio.h>
# include <stdlib.h>

void main (void)
{
int num = 100;
char str[25];
itoa(num, str, 10);
printf("The number 'num' is %d and the string 'str' is %s. \n" ,
num, str);
}

itoa()函數(shù)有3個參數(shù):第一個參數(shù)是要轉(zhuǎn)換的數(shù)字,第二個參數(shù)是要寫入轉(zhuǎn)換結(jié)果的目標字符串,第三個參數(shù)是轉(zhuǎn)移數(shù)字時所用 的基數(shù)。在上例中,轉(zhuǎn)換基數(shù)為10。10:十進制;2:二進制...
itoa并不是一個標準的C函數(shù),它是Windows特有的,如果要寫跨平臺的程序,請用sprintf。
是Windows平臺下擴展的,標準庫中有sprintf,功能比這個更強,用法跟printf類似:
char str[255];
sprintf(str, "%x", 100); //將100轉(zhuǎn)為16進制表示的字符串。

下列函數(shù)可以將整數(shù)轉(zhuǎn)換為字符串:
----------------------------------------------------------
函數(shù)名 作 用
----------------------------------------------------------
itoa() 將整型值轉(zhuǎn)換為字符串
itoa() 將長整型值轉(zhuǎn)換為字符串
ultoa() 將無符號長整型值轉(zhuǎn)換為字符串

一  atoi     把字符串轉(zhuǎn)換成整型數(shù)

例程序:

#include <ctype.h>
#include <stdio.h>
int atoi (char s[]);

int main(void )
{  

char s[100];

gets(s);

printf("integer=%d\n",atoi(s));
return 0;
}
int atoi (char s[])
{
int i,n,sign;

for(i=0;isspace(s[i]);i++)//跳過空白符
      ;
sign=(s[i]=='-')?-1:1;
if(s[i]=='+'||s[i]==' -')//跳過符號
      i++;
for(n=0;isdigit(s[i]);i++)
      n=10*n+(s[i]-'0');//將數(shù)字字符轉(zhuǎn)換成整形數(shù)字
return sign *n;

}

二       itoa      把一整數(shù)轉(zhuǎn)換為字符串

例程序:

#include <ctype.h>
#include <stdio.h>
void      itoa (int n,char s[]);
//atoi 函數(shù):將s轉(zhuǎn)換為整形數(shù)
int main(void )
{  
int n;
char s[100];

printf("Input n:\n");
scanf("%d",&n);

        printf("the string : \n");
        itoa (n,s);
return 0;
}
void itoa (int n,char s[])
{
int i,j,sign;

if((sign=n)<0)//記錄符號
      n=-n;//使n成為正數(shù)
        i=0;
do{
      s[i++]=n%10+'0';//取下一個數(shù)字
}while ((n/=10)>0);//刪除該數(shù)字

if(sign<0)
      s[i++]='-';
s[i]='\0';
for(j=i;j>=0;j--)//生成的數(shù)字是逆序的,所以要逆序輸出
      printf("%c",s[j]);

}


 

 

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
實用 | 10分鐘教你搭建一個嵌入式web服務器
boa服務器的移植
移植Boa Web服務器到ARM-Linux系統(tǒng) - ARM-Linux應用程序 - Te...
pc機上搭建boa服務器
Boa Web服務器在PC上移植
【精品博文】嵌入式3G機器人項目實戰(zhàn)----第三方軟件移植
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服