Index: [Article Count Order] [Thread]

Date:  Tue, 11 Nov 2003 18:37:58 +0900
From:  Takayuki Matsuki <matsuki@tokyo-kasei.ac.jp>
Subject:  [analog-jp:01673] Re: IIS のログ解析時の「異常ログ行数」について 
Sender:  matsuki@tokyo-kasei.ac.jp
To:  analog-jp@jp.analog.cx
Message-Id:  <mid-1673-analog-jp@jp.analog.cx>
In-Reply-To:  <mid-1669-analog-jp@jp.analog.cx>
References:  <mid-1667-analog-jp@jp.analog.cx> <mid-1669-analog-jp@jp.analog.cx>
X-Mail-Count: 01673

松木です。

> 三国です
> 
> 想像ですが(ソースを見てみました)、
> ログデータをfread()しているところで、
> 改行コード(CR+LF)が、片割れになってreadされる場合はないでしょうか?
> CRまでしかreadされなかった場合、次のfreadでは、LFから
> 始まって、"corrupt line"となる場合がある(必ずではない)ような気がします。

> 試しに以下の修正をしたところ発生しなくなりました。
> =====input.c=====
> ・・・・
> 
> void shunt_data(FILE *f) {
>   memmove((void *)block_start, (void *)record_start,
>           (size_t)(block_end - record_start));
>   (void)getmoredata(f, block_start + (block_end - record_start),
>                     (size_t)(BLOCKSIZE - (block_end - record_start)));
> 
> /* CRから開始された場合、CRをスキップする */
> if(*(block_start + (block_end - record_start)) == '\n') {
>     if(block_end == record_start) {    /* この条件も必要 */
>         debug('C', "CR(%.100s)",block_start+(block_end-record_start) );
> 
>         block_start++;
>     }
> }

これで現象がなくなったということなら、やはりこの箇所がおかしいという
ことになるのでしょう。1バイトずつfread()で文字を読んでいけば、確かに
三国さんの言われた現象も起きることと思います。しかし必ずしも、この現
象が起きていないということは、他の要素も絡んでいるとは思います。
しかし、今のところの解決方法は分かったわけですね。

debug()関数を入れたということは、DEBUG ONにしたときに、"CR(%.100s)"
の文字列が出力されるということを確かめられたということですよね?