開發板:EDUKIT-III實驗箱,S3C2410+LINUX2.4,實驗箱隨箱光盤提供的Zimage,nor flash啓動。
主機:ubnutn10.4LTS,arm-linux-gcc 2.95.3
問題1:交叉工具鏈:cross-2.95.3.tar.bz2(下載地址:http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/),開始使用的交叉工具鏈是arm-linux-gcc-3.3.2(下載地址:http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2),使用該工具鏈編譯出來的boa,在開發板上運行時,提示ssh: /lib/i686/libc.so.6: version `GLIBC_2.3′ not found (required by ./boa)錯誤。這是因爲arm-linux-gcc-3.3.2使用的glibc庫版本爲2.3版本,但是開發板上運行的LINUX的glibc版本爲2.2,因此運行boa,在動態鏈接glibc庫時,在開發板上找不到glibc2.3的庫,所以提示這樣的錯誤,解決方法用arm-linux-gcc-2.95.3交叉工具鏈。
交叉工具鏈安裝在/usr/local/arm/2.95.3/目錄下,要把arm-linux-gcc添加到PATH環境變量當中,方法有兩個:1.export PATH=/usr/local/arm/2.95.3/bin:$PATH,source /etc/profile,這種方法每次重啓終端後都必須執行一次;2.編輯/etc/profile文件,在該文件最後添加expot PATH=/usr/local/arm/2.95.3/bin:$PAH,然後重啓後生效。
問題2:對boa配置及其源碼修改完成後,./configure沒有問題,make時遇到如下錯誤:
stuyou@VMUBUNTU:/tmp/boa/boa-0.94.13/src$ make
yacc -d boa_grammar.y
make: yacc: Command not found
make: *** [y.tab.c] Error 127
編譯一個linux下的c系統,包含詞法和語法分析模塊,Linux上用bison和flex。
yacc是一個文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用於構造詞法分析機和語法解釋器的工具,利用Lex和yacc你可以輕鬆的構造一個語法解釋器。
解決方法:sudo apt-get install flex bison
重新make,問題解決
問題3:在開發板上運行boa時,提示無法綁定IP地址,[03/Aug/2028:07:59:35 +0000] boa.c:194 - unable to bind: Address already in use,通過ps命令查看當前運行進程,結果如下:
/etc/var/boa # ps
PID Uid VmSize Stat Command
1 root 476 S init
2 root SW [keventd]
3 root SWN [ksoftirqd_CPU0]
4 root SW [kswapd]
5 root SW [bdflush]
6 root SW [kupdated]
8 root SW [mtdblockd]
9 root SW [khubd]
30 root 500 S /sbin/httpd -h /usr/embest
32 root 528 S /sbin/inetd
43 root 700 S -sh
44 root 476 S init
45 root 476 S init
46 root 476 S init
59 root 608 R ps
發現httpd進程正在運行,進程號爲30,因此首先禁掉該進程
/etc/var/boa # kill 30
然後再重新啓動boa
etc/var/boa # ./boa
/etc/var/boa # [03/Aug/2028:08:00:03 +0000] boa: server version Boa/0.94.13
[03/Aug/2028:08:00:03 +0000] boa: server built Aug 22 2010 at 14:50:23.
[03/Aug/2028:08:00:03 +0000] boa: starting server pid=62, port 80
/etc/var/boa # ps
PID Uid VmSize Stat Command
1 root 476 S init
2 root SW [keventd]
3 root SWN [ksoftirqd_CPU0]
4 root SW [kswapd]
5 root SW [bdflush]
6 root SW [kupdated]
8 root SW [mtdblockd]
9 root SW [khubd]
32 root 528 S /sbin/inetd
43 root 704 S -sh
44 root 476 S init
45 root 476 S init
46 root 476 S init
62 root 604 S ./boa
63 root 608 R ps
boa啓動成功
問題4:cgi腳本不能正常運行。這是因爲在主機上編譯cgi腳本的時候,主機用戶爲非root用戶,這時編譯出來的cgi腳本不能運行。解決方法切換到root用戶,sudo -i,然後再編譯cgi,arm-linux-gcc -o demo1.cgi demo1.c,下載到開發板上,運行成功。
【boa移植步驟參考如下文檔】
方法:(注意:第1-11步是在PC機上開啓boa服務器的過程)
1.在/tmp下建立一個目錄boa,把boa源碼(boa-0.94.13.tar.gz)拷貝到該目錄下,然後解壓tar -xzvf boa-0.94.13.tar.gz
2.在LINUX家目錄下建立boa目錄,這是boa的安裝目錄。拷貝boa.conf到/home/boa
3.指定配置文檔路徑,把/tmp/boa/boa-0.94.13/src下的defines.h中的第30行#define SERVER_ROOT “/etc/boa“ 改爲#define SERVER_ROOT “/home/boa“
4.以下步驟按照“boa的移植.txt”文檔進行。
5.在 /tmp/boa/boa-0.94.13/src下執行./configure,提示
creating ./config.status
creating Makefile
creating config.h
6.然後make,以下是make信息
make: Warning: File `Makefile' has modification time 9.5 s in the future
bison -y -d boa_grammar.y
gcc -g -O2 -pipe -Wall -I. -c -o y.tab.o y.tab.c
y.tab.c: 在函數 ‘yyparse’ 中:
y.tab.c:1295: 警告:隱式聲明函數 ‘yylex’
flex boa_lexer.l
gcc -g -O2 -pipe -Wall -I. -c -o lex.yy.o lex.yy.c
boa_lexer.l: 在函數 ‘yylex’ 中:
boa_lexer.l:82: 警告:隱式聲明函數 ‘yyerror’
boa_lexer.l: 在頂層:
lex.yy.c:1183: 警告:‘yyunput’ 定義後未使用
gcc -g -O2 -pipe -Wall -I. -c -o alias.o alias.c
gcc -g -O2 -pipe -Wall -I. -c -o boa.o boa.c
gcc -g -O2 -pipe -Wall -I. -c -o buffer.o buffer.c
gcc -g -O2 -pipe -Wall -I. -c -o cgi.o cgi.c
gcc -g -O2 -pipe -Wall -I. -c -o cgi_header.o cgi_header.c
gcc -g -O2 -pipe -Wall -I. -c -o config.o config.c
gcc -g -O2 -pipe -Wall -I. -c -o escape.o escape.c
gcc -g -O2 -pipe -Wall -I. -c -o get.o get.c
gcc -g -O2 -pipe -Wall -I. -c -o hash.o hash.c
gcc -g -O2 -pipe -Wall -I. -c -o ip.o ip.c
gcc -g -O2 -pipe -Wall -I. -c -o log.o log.c
gcc -g -O2 -pipe -Wall -I. -c -o mmap_cache.o mmap_cache.c
gcc -g -O2 -pipe -Wall -I. -c -o pipe.o pipe.c
gcc -g -O2 -pipe -Wall -I. -c -o queue.o queue.c
gcc -g -O2 -pipe -Wall -I. -c -o read.o read.c
gcc -g -O2 -pipe -Wall -I. -c -o request.o request.c
request.c: 在函數 ‘get_request’ 中:
request.c:84: 警告:傳遞參數 3 (屬於 ‘accept’) 給指針時目標與指針有/無符號不一致
gcc -g -O2 -pipe -Wall -I. -c -o response.o response.c
gcc -g -O2 -pipe -Wall -I. -c -o select.o select.c
gcc -g -O2 -pipe -Wall -I. -c -o signals.o signals.c
gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c
gcc -g -O2 -pipe -Wall -I. -c -o sublog.o sublog.c
gcc -g -O2 -pipe -Wall -I. -c -o timestamp.o timestamp.c
gcc -o boa y.tab.o lex.yy.o alias.o boa.o buffer.o cgi.o cgi_header.o config.o escape.o get.o hash.o ip.o log.o mmap_cache.o pipe.o queue.o read.o request.o response.o select.o signals.o util.o sublog.o timestamp.o -g
gcc -g -O2 -pipe -Wall -I. -c -o index_dir.o index_dir.c
gcc -o boa_indexer index_dir.o escape.o -g
make: 警告:檢測到時鐘錯誤。您的創建可能是不完整的。
出現警告可以忽略,只要不出現錯誤即可,Make完成後,會在當前目錄下生成boa可執行文件。
7.拷貝boa boa.indexer到/home/boa/目錄
8.按照“boa的移植.txt”配置boa.conf
9.在/home/boa下創建www文件夾,cig-bin文件夾,log文件夾,把html相關文件拷貝到www文件夾
10.啓動boa.在/home/boa/目錄下執行./boa,默認在後臺運行,ps -a命令,可以看到boa正確啓動,或者cat log/error_log觀察錯誤信息,如果boa啓動正確,則打印如下信息
[27/Jul/2010:07:57:05 +0000] boa: server version Boa/0.94.13
[27/Jul/2010:07:57:05 +0000] boa: server built Jul 27 2010 at 15:30:25.
[27/Jul/2010:07:57:05 +0000] boa: starting server pid=3526, port 80
11.打開瀏覽器,訪問該boa服務器,瀏覽器地址欄中輸入http://192.168.1.120,該地址爲主機IP。瀏覽器輸出“hello, this is a web server!”
12.移植boa到嵌入式開發板,打開boa.conf的94行,#ServerName www.your.org.here,去掉註釋#
13.boa.conf的第155行MimeTypes /etc/mime.types修改爲MimeTypes /dev/null,如果不修改該行,則應該把PC上/etc/mime.types文件拷貝到開發板
14.打開/tmp/boa/boa-0.94.13/src下的Makefile文件,CC = gcc 和CPP = gcc -E 修改爲CC=arm-linux-gcc 和 CPP = arm-linux-gcc -E
15.然後重新make。先執行make clean,然後再make
16.啓動開發板,進入到開發板上的LINUX,在/home目錄下新建boa目錄
17.在/home/boa目錄下新建www,log,cgi-bin目錄下
18.把PC機上編譯好的boa,boa_indexer,boa.conf通過串口線下載到開發板的/home/boa下
19.把PC機上的www目錄下的文件壓縮打包,然後傳送到開發板,解壓後,放入/home/boa/www下
20.使用ifconfig eth0 ipaddress
20.在PC機上的瀏覽器中輸入開發板網址,可以看到“hello, this is a web server!”,boa服務器就在開發板中正確搭建了。
21.網頁中的cgi編程:編寫程序代碼,比如爲demo2.c,根據請求網頁(demo2.html)中<FORM ACTION="/cgi-bin/demo2.cgi">規定的demo2.cgi文件名,然後進行編譯,arm-linux-gcc -o demo2.cgi demo2.c
22.然後把demo2.html下載到開發板/home/boa/www目錄下,把編譯好的demo2.cgi拷貝到開發板的/home/boa/cgi-bin目錄下,併爲demo2.cgi增加執行權限
23.在PC機中的瀏覽器地址欄輸入http://http://192.168.1.120/demo2.html,這就是使用cgi編程的流程。
24.html網頁向boa服務器發送的數據格式是默認的,也可以通過腳本文件,更改發送數據格式。
25.該例子的所有文件均在該目錄下。
【boa的移植】
boa服務器移植:
<一> 修改源碼:
1. 修改src/defines.h中的
第30行:#define SERVER_ROOT "/home/boa" # boa配置文件(boa.conf)的存放路徑
2. 修改compat.h:
去掉 第120行"#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff" 中的 "##" 這是早期編譯器使用的,現在編譯器不支持該動作,所以去掉。
去掉 第126行"#define TIMEZONE(foo) foo##->tm_zone" 中的 "##"
3. 修改boa.c
註釋掉 第210行~215行:
註釋掉 第226行 : //DIE("icky Linux kernel bug!");
<二> 編譯boa:
1. ./configure
2. make
<三> 配置:
1. 拷貝boa、boa_indexer到開發板/home/boa目錄
2. 拷貝boa.conf到開發板/home/boa目錄
3. 修改boa.conf
a. 修改User nobody 爲 User 0 ; 表示root用戶運行該程序
b. 修改Group nogroup 爲 Group 0
c. ErrorLog /home/boa/log/boa/error_log 錯誤日誌放在該文件夾下。
d. AccessLog /home/boa/log/access_log 訪問日誌放在該文件夾下
e. DocumentRoot /home/boa/www 網頁文件放在該目錄下
DirectoryMaker /home/boa/boa_indexer
f. ScriptAlias /cgi-bin/ /home/boa/cgi-bin 腳本放置目錄
g. 此步只要在開發板上做(如果boa運行在開發板上,則要做這一步,如果只運行在PC機上,則不用做這步): 94行,#ServerName www.your.org.here,去掉註釋#,#後面的字符爲服務器的名字,可以隨便取。
h.boa.conf的第155行MimeTypes /etc/mime.types修改爲MimeTypes /dev/null,如果不修改該行,則應該把PC上/etc/mime.types文件拷貝到開發板
4. 根據配置創建相關目錄:(在/home/boa/目錄下創建以下目錄)
log www cgi-bin
5. 在www放入html文件, 在cgi-bin放入cgi腳本
【boa服務器移植常見錯誤】
一> 編譯boa程序
1. www.boa.org下載boa-0.94.13.tar.gz
2. 解壓
3. ./configure
4. make
編譯時用2.95.3以上的版本會出錯:
util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1
解決方法:
方法1>. 修改compat.h中的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
爲:
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
方法2>. 改用2.95.3版本的編譯器。
二> 修改配置文件boa.conf
1. 建立/etc/boa目錄, 並複製boa.conf到/etc/boa目錄下,並按照以下步驟進行修改。
2. 修改訪問權限:修改User nobody 爲 User 0 ; 修改Group nogroup 爲 Group 0
3. 設定日誌目錄:boa日誌有兩部分,Errorlog 和 AccessLog
一般情況下爲/var/log/boa/error_log 和 /var/log/boa/access_log兩個文件。所以根據自己的情況情況設置日誌目錄:
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
(注意:這裏/var/log/boa目錄必須爲可寫,否則會出項錯誤:log.c:73 – Unable to dup2 the error log: Bad file r.)
4. 設置html文件目錄: DocumentRoot /var/www
5. 設置默認首頁: DirectoryIndex index.html
6. 設置cgi腳本目錄: 將
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin
修改爲
ScriptAlias /cgi-bin/ /var/www/cgi-bin
三> 根據第二步設置建立相關文件夾並放入文件:
1. 根據(第二.3步)的設置建立/var/boa 文件夾。
2. 根據(第二.4步)的設置建立/var/www 文件夾, 並在此目錄下存放html文件(包括index.html文件)。
3. 根據(第二.6步)的設置建立/var/www/cgi-bin 文件夾, 並存放一些用來測試的cgi腳本。
四> OK,運行boa程序。
在windows 下通過http://172.20.223.151這種形式訪問,進行測試。
五> 移植到開發板
1>. (第一.3步)操作完成之後,修改Makefile文件:
將:
CC = gcc
CPP = gcc -E
該爲:
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
make即可。
2>. 拷貝PC上/etc/mime.types文件到開發板/etc目錄下
或者將boa.conf文件中
MimeTypes /etc/mime.types
修改爲:
MimeTypes /dev/null
boa配置相關目錄:
1. boa.conf 的存放目錄:
默認boa.conf是在/etc/boa.conf目錄的,boa運行時會自動去找/etc/bon.conf目錄。
這個設定是在define.h文件中定義的,可在編譯之前進行修改。
2. log目錄: 分爲 Errorlog 和 AccessLog 兩個目錄,可在boa.conf中修改。
如:
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
3. html文件存放目錄, 可在boa.conf文件中修改。
如: DocumentRoot /var/www
4. cgi腳本存放目錄, 可在boa.conf文件中修改。
如: ScriptAlias /cgi-bin/ /var/www/cgi-bin
5. mime.types存放目錄, 可在boa.conf文件中修改。
如: MimeTypes /etc/mime.types
六> 常見錯誤:
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> 確定日誌目錄對與所有用戶都具有可讀/寫的權限
方法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
【boa服務器的移植流程,網上某篇文檔】
Boa是一種非常小巧的Web服務器,其可執行代碼只有大約60KB左右。作爲一種單任務Web服務器,Boa只能依次完成用戶的請求,而不會fork出新的進程來處理併發連接請求。但Boa支持CGI,能夠爲CGI程序fork出一個進程來執行。Boa的設計目標是速度和安全。
下面給大家介紹一下Boa服務器移植的具體操作步驟,希望能夠有幫助。
環境
主機:ubuntu8.10
交叉工具鏈:gcc-3.4.5-glibc-2.3.6
目標:s3c2410開發板
結合網上一些文檔,整理了一個比較完整的文檔。
1.下載Boa源碼
下載地址: http://www.boa.org/
最新發行版本: 0.94.13
下載 boa-0.94.13.tar.gz
解壓:# tar xzf boa-0.94.13.tar.gz
2.安裝需要工具bison,flex
sudo apt-get install bison flex
否則會出現如下錯誤
make: yacc:命令未找到
make: *** [y.tab.c] 錯誤 127
make: lex:命令未找到
make: *** [lex.yy.c] 錯誤 127
3.修改文件
(1)修改 src/compat.h
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
否則會出現錯誤:
util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 錯誤 1
(2)修改 src/log.c
註釋掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
爲:
否則會出現錯誤:
log.c:73 unable to dup2 the error log:bad file descriptor
(3)修改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
否則會出現錯誤:boa.c:211 - getpwuid: No such file or directory
註釋掉下面語句:
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
爲
#if 0
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
#endif
否則會出現問題:boa.c:228 - icky Linux kernel bug!: No such file or directory
4、生成Makefile文件
執行:
#cd boa-0.94.13/src
#./configure
5、修改Makefile
cd src
vim Makefile
修改CC = gcc 爲 CC = arm-softfloat-linux-gnu-gcc
修改CPP = gcc -E 爲 CC = arm-softfloat-linux-gnu-gcc -E
6、編譯
make
ls -l boa
-rwxr-xr-x 1 david david 189223 2009-05-31 13:44 boa
然後爲生成的二進制文件boa瘦身
arm-softfloat-linux-gnu-strip boa
ls -l boa
-rwxr-xr-x 1 david david 61052 2009-05-31 13:51 boa
可以發現boa的大小前後差距很大這爲我們節省了很大的空間
7、Boa的配置
這一步的工作也在電腦主機上完成。
在boa-0.94.13目錄下已有一個示例boa.conf,可以在其基礎上進行修改。如下:
#vi boa.conf
(1)Group的修改
修改 Group nogroup
爲 Group 0
(2)user的修改
修改 User nobody
爲 User 0
(3)ScriptAlias的修改
修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
爲 ScriptAlias /cgi-bin/ /www/cgi-bin/
(5)DoucmentRoot的修改
修改DoucmentRoot /var/www
爲DoucmentRoot /www
(6)ServerName的設置
修改#ServerName www.your.org.here
爲 ServerName www.your.org.here
否則會出現錯誤“gethostbyname::No such file or directory”
(7)AccessLog修改
修改AccessLog /var/log/boa/access_log
爲#AccessLog /var/log/boa/access_log
否則會出現錯誤提示:“unable to dup2 the error log: Bad file descriptor”
(8)以下配置和boa.conf的配置有關,都是在ARM根文件系統中創建
以下步驟在開發板上進行:
創建目錄/etc/boa並且把boa 和 boa.conf拷貝到這個目錄下
mkdir /etc/boa
創建HTML文檔的主目錄/www
mkdir /www
創建CGI腳本所在錄 /www/cgi-bin
mkdir /www/cgi-bin
以下步驟在ubuntu下進行:
將boa.conf拷貝到開發板根文件系統的/etc/boa下
#cp boa.conf /source/rootfs/etc/boa
將boa拷貝到開發板根文件系統的/etc/boa下
#cp src/boa /source/rootfs/etc/boa
將ubuntu下/etc/mime.types拷貝到開發板根文件系統的/etc下
#cp /etc/mime.types /source/rootfs/etc
將你的主頁index.html拷貝到www目錄下
8、測試
打開一個瀏覽器輸入開發板ip看看效果
OK
我使用的是micro2440開發板
boa.conf配置如下:
Port 80
User root
Group root
ErrorLog /dev/console
AccessLog /dev/null
ServerName IntelligenceApplianceServer
DocumentRoot /www
DirectoryIndex index.html
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /etc/mime.types
DefaultType text/plain
CGIPath /bin
AddType application/x-httpd-cgi cgi
ScriptAlias /cgi-bin/ /www/cgi-bin/
在/www目錄下創建micro2440文件夾,將原開發板的所有內容轉移到該文件夾下
瀏覽器中輸入http://192.168.0.126/micro2440/訪問
第四步 CGI腳本測試
1、編寫Helloworld.c程序
#include <stdio.h>
int main(void)
{
printf("Content-type: text/html/n/n");
printf("<html>/n");
printf("<head><title>CGI Output</title></head>/n");
printf("<body>/n");
printf("<h1>Hello,world.</h1>/n");
printf("<body>/n");
printf("</html>/n");
exit(0);
}
交叉編譯生成helloworld.cgi
# arm-linux-gcc -o helloworld.cgi helloworld.c
2、瀏覽
將helloworld.cgi拷貝至/var/www/cgi-bin/下,瀏覽器輸入