LINUXベース(04)(コードリスト管理プロトコルアーキテクチャを理解する)プロジェクトをデザイン

サウンド・ソースのフレームワークを持っている必要があります良いプロジェクトを設計するには

  関数ポインタとデータ処理のデータフィールドを有するボディ構造は、各ノード上で動作する空のリスト管理リストトラバーサルノードは、ノードを削除増加の機能を実現します

                      契約書に署名し、リストを管理するためのオブジェクトを追加するためにソケットを実装

リンクリスト(LinkListInit)オブジェクトを作成するための運用管理契約を達成するために、リストを使用して、 

(テールがリストノード(RegisterProtocol)を追加)登録したプロトコルを追加し、

プロトコルを削除する((ヘッドが削除DeleteProtocol))、

ノードと動作を一致させる機能(TraverseList)各ノードのリストをトラバースし、

指定されたIDを削除するための契約(指定されたノード(DeleteNode)を除去)、

、破壊プロトコルオブジェクト(リストオブジェクトブランク(DestoryProtocolStack))(ノード(ClearProtocol)を削除する)空のリストは、リストの長さ(親リストオブジェクト(GetCurrentSize)の長さ)を返します。

サインアップHTTPプロトコル(InitHttp):. 1新しい(ターゲット)ノード(malloc関数)  

        2.オブジェクトセット(T_DATA ID = HTTP、フラグ= INUSE; INIT =追記機能(InitHttpNode)接続またはリスニング; SendFunction =リアライズ送信さらなる機能(HttpSendFunction))

          (InitHttpNode:設定したIPアドレスまたは... HttpSendFunctionとの接続待機ポート:send_buffer使用を送信....

        3.リスト内のオブジェクトに(RegisterProtocol)への良好なターゲットを作成して、設定を追加します。

HTTPとHTTPS登録TCPソース枠組み合意

 

1の#include <stdio.hの>
 2の#include <STDLIB.H>
 3  
4  の#define BUFFER_SIZE 0x1000を
 5      
6  の#define HTTP 0x1の
 7  の#define HTTPSを0x2
 8  の#define TCPの0x3の
 9      
10  の#define INUSEの0x1の
 11  の#define UNUSEの0x2の
 12      
13  の#define EMPTY 0x2の
 14  の#define NOEMPTY 0x3の
 15  
16  の#define偽0
 17  の#defineトゥーレ1
 18  
19  / * アプリケーションパラメータ* / 
20  の#define DEBUG(1)
 21      / * デバッグプリント* / 
22  の#if DEBUG
 23      の#define DBG_PRINT(FMT、引数...)を実行{のprintf( "[*] Listlink <%S>:" FMT " \ n」は\
 24                              、__ func__、##引数); } 一方25  の#else 
26      の#define DBG_PRINT(...){}行う(偽)しながら
 27  #endifの
28  
29  
30符号なしのtypedef チャー  U8。
31の符号なしのtypedef 短いU16。
32符号なしのtypedefint型の   U32;
33  
34のtypedef 構造体_T_NodeStruct {
 35      U8番号;
36      U8フラグ。
37      ; [BUFFER_SIZE] send_buffer U8
38の      U32(* INIT)(無効)。
39の      U32(* SendFunction)(INT FD、U8 * send_buffer、U32長)
40  } T_NodeStruct。
41 T_NodeStruct *のtypedef Pt_NodeStruct。
42  
43  
44のtypedef 構造体_T_ListLinkNode {
 45      T_NodeStructのT_DATA。
46      構造体_T_ListLinkNode * pt_next;
 47  } T_ListLinkNode;
 48 T_ListLinkNode *のtypedef Pt_ListLinkNode;
 49  
50のtypedef 構造体_T_list {
 51は     Pt_ListLinkNode Pfront;
 52である     Pt_ListLinkNodeのprear;
 53は、     U32の長さ;
 54である } T_list;
 55 T_list *のtypedefをpt_list、
 56は 
57である 
58  ボイドClearProtocal(pt_list ptlist ); //クリアプロトコルはDeleteProtocol登録がすべてのリストでノードを削除するために呼び出す活用
 59  のボイドDeleteNode(pt_list ptlist、IDのU8); //選択したノードIDの削除
 60  ボイドDeleteProtocal(Pt_listのptlist、Pt_ListLinkNodeのptlistnode) ; // ヘッダノードを削除し、バックアップデータを削除する、2番目のパラメータはにNULLとすることができる保存しない
 61は、 空隙DestoryProtocalStack(pt_list ptlist); //すべての空のリストのノードセット
 62である U32 GetCurrentSize (pt_listのptlist); //は、長さの現在のリストを取得する
 63  U8のisEmpty(pt_listのptlist); //空の判決を受け
 、64 pt_list ListLinkInit(無効); //リストオブジェクトの作成
 65  、ボイドRegisterProtocal(pt_listのptlist、Pt_ListLinkNodeのptlistnodeを); //登録作成されたオブジェクトのリストにノードを追加することで合意には、管理対象
 66  のボイド TraverseList(pt_listのptlist、無効 ;(*トラバース)(Pt_ListLinkNodeのptlistlinknode、U8 *)) 
                                               //マッチング機能、リンクリストのそれぞれに渡された関数をノードが動作します

 

おすすめ

転載: www.cnblogs.com/yxnrh/p/11399179.html