GoAhead 2.1.8埋め込み式webserverソース分析学習(三)---main関数分析
一、GoAhead埋め込み式webserver--LINUX分岐
ソースコードのLINUXフォルダにmainが含まれています.cファイルとMakefileファイルは、LINUX環境下のwebserverプログラムをコンパイルする必要があります.makeだけでいいです.ここではこのmainの主関数について分析し、それから木藤摸瓜のさらなる分析ソースコードを行い、現在のこれらの関数分析は現在関数機能に対して分析するしかなく、webserverの運行メカニズムの流れ全体に深く入り込むことができないことをよく理解している.だから分析は少し退屈ですが、その中のいくつかの関数は非常によく書かれていて、良い参考性を持っています.
二、原コード断片
三、main関数構造分析
main関数では、bopen()、initWebs()、socketReady()、socketSelect()、socketProcess()、websCgiCleanup()、emfSchedProcess()、webCloseServer()、socketClose()、bclose()の関数がいくつかあります.
これらの関数では,一般的なプログラムやシステムの動作の法則に基づいて,必ず3つの部分に分かれている.
最初の部分は、プライマリ・ビジネス・プロセス全体が実行される前に、リソース全体を準備し、必要な初期化操作を行うことです.ここで、データの最初の部分は、bopen()、initWebs()の2つの関数です.bopen関数はプログラムが自分でメモリを申請する関数で、GoAheadは最小60 Kのメモリで実行できるのは彼女自身のメモリ申請の管理方法のおかげだと言った.initWebs関数は、デフォルトのWebページなど、いくつかのネットワークリソースの初期化を行い、関数はハンドル配列、ネットワークリスニングソケット、ポートを処理します.
2つ目の部分は、プログラム・プライマリ・プログラムが実行された後、デッドサイクルに入り、リクエストをリスニングし、リクエストを処理し、リクエストに返信することです.whileループの関数は、socketReady()、socketSelect()、socketProcess()、websCgiCleanup()、emfSchedProcess()という機能です.
第3部は、ループが終了すると、リソースの解放が必要になります.特にmallocメモリの解放の問題、ファイルハンドルの閉鎖の問題など、プログラム全体の実行を終了するには、良い処理が必要です.次のいくつかのclose関数は、webCloseServer()、socketClose()、bclose()という役割を果たしています.
四、まとめ
以上main関数の分析の総括で、主にプログラムの運行のあの3つの部分を理解して、やっとよく的確な学習と関数の分析を行うことができます.
ソースコードのLINUXフォルダにmainが含まれています.cファイルとMakefileファイルは、LINUX環境下のwebserverプログラムをコンパイルする必要があります.makeだけでいいです.ここではこのmainの主関数について分析し、それから木藤摸瓜のさらなる分析ソースコードを行い、現在のこれらの関数分析は現在関数機能に対して分析するしかなく、webserverの運行メカニズムの流れ全体に深く入り込むことができないことをよく理解している.だから分析は少し退屈ですが、その中のいくつかの関数は非常によく書かれていて、良い参考性を持っています.
二、原コード断片
int main(int argc, char** argv)
{
bopen(NULL, (60 * 1024), B_USE_MALLOC);
signal(SIGPIPE, SIG_IGN);
if (initWebs() < 0) {
return -1;
}
while (!finished) {
if (socketReady(-1) || socketSelect(-1, 1000)) {
socketProcess(-1);
}
websCgiCleanup();
emfSchedProcess();
}
websCloseServer();
socketClose();
bclose();
return 0;
}
以上はいくつかのソースコードで、私はその中のいくつかのSSL暗号化とユーザー管理の方面のコードを削除して、これらはここで貼っていないで、興味があるのは下のソースコードを見ることができます.三、main関数構造分析
main関数では、bopen()、initWebs()、socketReady()、socketSelect()、socketProcess()、websCgiCleanup()、emfSchedProcess()、webCloseServer()、socketClose()、bclose()の関数がいくつかあります.
これらの関数では,一般的なプログラムやシステムの動作の法則に基づいて,必ず3つの部分に分かれている.
最初の部分は、プライマリ・ビジネス・プロセス全体が実行される前に、リソース全体を準備し、必要な初期化操作を行うことです.ここで、データの最初の部分は、bopen()、initWebs()の2つの関数です.bopen関数はプログラムが自分でメモリを申請する関数で、GoAheadは最小60 Kのメモリで実行できるのは彼女自身のメモリ申請の管理方法のおかげだと言った.initWebs関数は、デフォルトのWebページなど、いくつかのネットワークリソースの初期化を行い、関数はハンドル配列、ネットワークリスニングソケット、ポートを処理します.
2つ目の部分は、プログラム・プライマリ・プログラムが実行された後、デッドサイクルに入り、リクエストをリスニングし、リクエストを処理し、リクエストに返信することです.whileループの関数は、socketReady()、socketSelect()、socketProcess()、websCgiCleanup()、emfSchedProcess()という機能です.
第3部は、ループが終了すると、リソースの解放が必要になります.特にmallocメモリの解放の問題、ファイルハンドルの閉鎖の問題など、プログラム全体の実行を終了するには、良い処理が必要です.次のいくつかのclose関数は、webCloseServer()、socketClose()、bclose()という役割を果たしています.
四、まとめ
以上main関数の分析の総括で、主にプログラムの運行のあの3つの部分を理解して、やっとよく的確な学習と関数の分析を行うことができます.