Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/18:16/20
2024/05/17:19/24

2024/03/19より398/1409
人気モジュール
No.1: フォーラム 120
No.2: QualNet概要 4
No.3: ニュース 2
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット93
No.2:Unknown OS1
No.3:Windows NT1

No.1:どっかの巡回ロボット83
No.2:Majestic-12巡回ロボット7
No.3:Google巡回ロボット3

日曜日からの合計
メイン
   Routing Protocols Implementation & Model Development
     OLSRのハローメッセージに新たな情報を持たせる方法
投稿するにはまず登録を

題名 投稿者 日時
   OLSRのハローメッセージに新たな情報を持たせる方法 shiba 2011/1/3 22:10
     Re: OLSRのハローメッセージに新たな情報を持たせる方法 hiro 2011/1/4 12:30
       Re: OLSRのハローメッセージに新たな情報を持たせる方法 shiba 2011/1/4 14:54
         Re: OLSRのハローメッセージに新たな情報を持たせる方法 hiro 2011/1/6 17:53
           Re: OLSRのハローメッセージに新たな情報を持たせる方法 shiba 2011/1/8 16:35
           » Re: OLSRのハローメッセージに新たな情報を持たせる方法 hiro 2011/1/9 11:05
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
hiro
投稿日時: 2011/1/9 11:05
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: OLSRのハローメッセージに新たな情報を持たせる方法
動きましたか、それは良かったです。

これって、
構造体(struct)や共用体(union)の最後のメンバは不完全配列型でも
よいことになっていて。正式には『フレキシブル配列メンバ』と呼ぶのですが、
まあ、難しいC言語のことは興味あれば調べて見て下さい。

で、今回の構造体の最後にある配列hell_info[1]は1固定ではなく、
プログラム実行中に配列の要素数を変更することができるのです。
というか、わざわざ[1]と定義するのは変更したいからです。

この場合、
HELLOパケットで送信する内容はその時のNodeが持っている情報に
応じて変化するため、実行時でないと配列の要素数が決まらないのです。
しかも、hellmsg全体を連続したメモリで処理した方が便利です。
連続領域で使いたいから、
hellinfo *hell_info;
hell_info = (hellinfo *)malloc ((sizeof hellinfo) * n);
という使い方ではなくって、
hellinfo hell_info[1];
にしているわけです。

具体的には、
定義時にはhell_info[1]ですが、実行時にはhell_info[2]だったり
hell_info[3]するわけです。
したがって、hell_info[1]の次にSpeedを定義すると、hell_info[2]に
なる時にSpeed部分が上書きされ、設定した値がなくなったわけです。

なお、今回のOLSRの場合は配列要素数という使い方はしておらず、
for (hinf = hinfo; (char *)hinf < (char *)m + m->olsr_msg_size;
         hinf = (hellinfo *)((char *)hinf + hinf->link_msg_size))

と処理していますが、説明を簡単にするために配列要素数で
説明しました。
フラット表示 前のトピック | 次のトピック
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT