當前位置:首頁 » 編程軟體 » linux中編譯生成cgi文件

linux中編譯生成cgi文件

發布時間: 2023-04-27 13:08:48

① 自己編寫的linux Web Server調用CGI程序時出現問題

如果你的程序中的 CGI 程物敬好檔序只能啟動罩襪慎一次,可能是因為你的程序沒有正確處理子進程退出的情況。
在調用 execvp 函數啟動子進程執行 CGI 程序時,子進程會替換掉父進程的代碼和數據空間,執行 CGI 程序。如果 CGI 程序執行完畢後正常退出,子進程會自動結束,父進程會收到子進程退出的信號。
在收到子進程退出的信號後,父進程應該調用 wait 或者 waitpid 函數等待子進程退出,並獲取子進程的退出狀態。如果父進程沒有調用 wait 或者 waitpid 等待子進程退出,子進程可能會變成僵屍進程,導致後續的 CGI 程序無法正常啟動。
因此,建議在父進程中調用 wait 或者 waitpid 等函數等待子進程退出,以避免出現僵屍進程的情況。
回答不易,請點個贊。

② 怎麼把*.c文件編譯成*.cgi

把cgi.h
cgi.c
cgi.o
libcgi.a拷到當前目錄
用g++重新把cgi.c
cgi.h編譯成鏈接庫,即編譯成cgi.o文件覆蓋原來的以後用g++編譯CheckIn.c時鏈接當前目錄下的cgi庫

③ 在linux中,怎麼用gcc編譯文件

在終端中輸入 gcc 文件名 -o 目標文件名
然後 ./目標文件名 就行了,沒有目標文件名,自動存為 a
執行 ./a 就行了。

在使用Gcc編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,其中多數參數我們可能根本就用不到,這里只介紹其中最基本、最常用的參數。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。
-c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為後綴的目標文件,通常用於編譯不包含主程序的子程序文件。
-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。
-g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。
-O,對程序進行優化編譯、連接,採用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。
-O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢。
-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程中使用的參數。C程序中的頭文件包含兩種情況∶
A)#include <myinc.h>
B)#include 「myinc.h」
其中,A類使用尖括弧(< >),B類使用雙引號(「 」)。對於A類,預處理程序cpp在系統預設包含文件目錄(如/usr/include)中搜尋相應的文件,而B類,預處理程序在目標文件的文件夾內搜索相應文件。

GCC執行過程示例

示例代碼 a.c:
#include <stdio.h>
int main()
{
printf("hello\n");
}
預編譯過程:
這個過程處理宏定義和include,並做語法檢查。
可以看到預編譯後,代碼從5行擴展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
編譯過程:
這個階段,生成匯編代碼。
gcc -S a.i -o a.s
cat a.s | wc -l
59
匯編過程:
這個階段,生成目標代碼。
此過程生成ELF格式的目標代碼。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
鏈接過程:
鏈接過程。生成可執行代碼。鏈接分為兩種,一種是靜態鏈接,另外一種是動態鏈接。使用靜態鏈接的好處是,依賴的動態鏈接庫較少,對動態鏈接庫的版本不會很敏感,具有較好的兼容性;缺點是生成的程序比較大。使用動態鏈接的好處是,生成的程序比較小,佔用較少的內存。
gcc a.o -o a
程序運行:
./a
hello
編輯本段
GCC編譯簡單例子

編寫如下代碼:
#include <stdio.h>
int main()
{
printf("hello,world!\n");
}
執行情況如下:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.c -o hello
./hello
hello,world!

④ Linux下,C語言文件編譯成.CGI.格式文件的問題

放哪裡都可以攜盯指,進到則叢文件所放辯配路徑,用gcc編譯器編譯。如:gcc -o test test.c 就是說把test.c文件編譯鏈接生成test可執行程序。然後再命令:./test linux下「。/」表示運行

⑤ Linux環境下如何將C編寫的程序編譯為*.cgi

樓上不懂不要瞎說
關鍵是要輸出Content-type和兩個\r\n

#include <stdio.h>
int main(){
printf("Content-type: text/html\r\n\r\n");
printf("hello,world!");
return 0;
}

編譯改名就可以了

如果需要表單,請參考
http://www.cs.tut.fi/~jkorpela/forms/cgic.html

⑥ LINUX 操作系統下的CGI是什麼意思

建議:
個人認為在Linux操作系統下翻譯選擇CGI (Common Gateway Interface) 通用網關介面比較准確。

其他參考翻譯如下:
作為一個英文縮寫,該名詞有多種含義:
CGI (Common Gateway Interface) 通用網關介面
CGI(Computer Generation Image)計算機合成圖像/電腦三維動飢察畫
CGI(Computer Graphics Interface) 計算機圖形陸氏接爛悉茄口標准
CGI(Cell Global Identifier) 全球小區識別碼
CGI(Compacted Graphite Iron)縮狀石墨鑄鐵
CGI(Clinton Global Initiative )柯林頓全球倡議
CGI (Clinical Global Impression)臨床療效總評量表

⑦ linux 怎麼編譯c的源程序的gcc,編譯命令是什麼

在Linux下面,如果要編譯一個C語言源程序,我們要使用gcc編譯器。

先將源文件編譯成目標文件:gcc - c hello.c

生成hello.o文件,再將目標文件編譯成可執行文件:gcc -o hello hello.o

如:

int main(int argc,char **argv)

{

printf("Hello Linux ");

}

(7)linux中編譯生成cgi文件擴展閱讀:

在使用GCC編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,這里只介紹其中最基本、最常用的參數。具體可參考GCC Manual。

GCC最基本的用法是∶gcc [options] [filenames]

其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。

網路_gcc

⑧ linux apache2 執行CGI程序怎麼全是文本

  1. 是要編譯為機械碼( binary code ) 的

  2. HTML 能在 cgi-bin 里正常出現其實並不正悔慶常.. 一定程度上代表這個 dir 還沒設成一個執行 cgi 的環境 ( 但我不肯定 )

  3. 你是碧鬧握否已在 MIME 裡面加入了 AddType application/octet-stream .exe ( 或 .cgi 甚麼彎團的 )

  4. 或者 AddHandle? 如AddHandler cgi-script .exe ( 或 .cgi 甚麼的 )


主要來說我頗肯定這里是 conf 里的問題, 但如果你真的調試時, 最好先寫個最簡單的 exe 來測試, 甚至裝再更輕量點的 server, 如 ngnix 來試試..

⑨ 如何在Linux下配置apache,以發布網站,和支持cgi

首先要確定是否配置問題:
相關指令
AddHandler
Options
ScriptAlias

CGI(公共網關介面[Common Gateway Interface])定義了網站伺服器與外部內容協商程序之間交互的方法,通常是指CGI程序或者CGI腳本,是在網站上實現動態頁面的最簡單而常用的方法。本文將對如何在Apache網站伺服器上建立CGI以及如何編寫CGI程序作介紹。

配置Apache以允許CGI

要讓CGI程序能正常運作,必須配置Apache以允許CGI的執行,其方法有多種。

ScriptAlias
ScriptAlias指令使Apache允許執行一個特定目錄中的CGI程序。當客戶端請求此特定目錄中的資源時,Apache假定其中文件都是CGI程序並試圖運行。

ScriptAlias指令形如:

ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/

如果Apache被安裝到默認的位置,默認的配置文件httpd.conf中則會有上述配置。ScriptAlias指令定義了映射到一個特定目錄的URL前綴,與Alias指令非常相似,兩者一般都用於指定位於DocumentRoot目錄以外的目錄,其區別是ScriptAlias又多了一層含義,即其URL前綴中任何文件都被視為CGI程序。所以,上述例子會指示Apache,/cgi-bin/應該指向/usr/local/apache/cgi-bin/目錄,且視之為CGI程序。

舉例,如果有URL為http://www.example.com/cgi-bin/test.pl的請求,Apache會試圖執行/usr/local/apache/cgi-bin/test.pl文件並返回其輸出。當然,這個文件必須存在而且可執行,並以特定的方法產生輸出,否則Apache返回一個出錯消息。

ScriptAlias目錄以外的CGI
由於安全原因,CGI程序通常被限制在ScriptAlias指定的目錄中,如此,管理員就可以嚴格地控制誰可以使用CGI程序。但是,如果採取了恰當的安全方法措施,則沒有理由不允許其他目錄中的CGI程序運行。比如,你可能希望用戶在UserDir指定的宿主目錄中存放頁面,而他們有自己的CGI程序,但無權存取cgi-bin目錄,這樣,就產生了運行其他目錄中CGI程序的需求。

用Options顯式地允許CGI的執行
可以在主伺服器配置文件中,使用Options指令顯式地允許特定目錄中CGI的執行:

<Directory /usr/local/apache/htdocs/somedir>
Options +ExecCGI
</Directory>

上述指令使Apache允許CGI文件的執行。另外,還必須告訴伺服器哪些文件是CGI文件。下面的AddHandler指令告訴伺服器所有帶有cgi或pl後綴的文件是CGI程序:

AddHandler cgi-script cgi pl

.htaccess文件
.htaccess文件是針對目錄進行配置的一種方法。Apache在提供一個資源時,會在此資源所在目錄中尋找.htaccess文件,如果有,則使其中的指令生效。AllowOverride 指令決定了.htaccess文件是否有效,它指定了哪些指令可以出現在其中,或者根本不允許使用。為此,需要在主伺服器配置中如此配置:

AllowOverride Options

在.htaccess文件中,需要如此配置:

Options +ExecCGI

以使Apache允許此目錄中CGI程序的執行。

另外要注意:
cgi程序一定要先輸出
Content-type: text/html 這樣一行
並且下面有一個空行。

⑩ linux下apache發布CGI程序後,通過瀏覽器訪問的結果卻是源碼,求高手幫忙。

應該亂山是伺服器上沒有安裝perl解析程雹脊序吧?
所以perl沒有執行,導源陪滲致直接顯示出了源碼。
把perl安裝一下就ok了應該。

熱點內容
ftp虛擬目錄上傳文檔 發布:2025-07-13 10:51:18 瀏覽:640
香港雲伺服器建站有用嗎 發布:2025-07-13 10:46:26 瀏覽:435
安卓如何進入賞金賽 發布:2025-07-13 10:44:48 瀏覽:812
obd源碼android 發布:2025-07-13 10:43:59 瀏覽:795
編譯器錯誤cs0016 發布:2025-07-13 10:42:36 瀏覽:771
c語言二進制代碼 發布:2025-07-13 10:27:28 瀏覽:19
kc杯腳本 發布:2025-07-13 10:27:22 瀏覽:614
android選中變色 發布:2025-07-13 10:23:09 瀏覽:953
進程隱藏源碼 發布:2025-07-13 10:11:29 瀏覽:744
安卓如何實名認證和平精英 發布:2025-07-13 10:09:27 瀏覽:236