2004年11月30日

[vine-users:068986] Re: grepで上書きエラー

大里です。

# 今日はこんなネタがあったのか:)
# 乗り遅れですが。

> From: y_shiro@xxxxx
> Subject: [vine-users:068976] Re: grepで上書きエラー
> Date: Tue, 30 Nov 2004 13:34:17 +0900

> 実際に、a、bのファイルを作成して試してみました。

> $ grep test * > c
> $ grep test * > c
> a、bの二つだけだとcには
> a、bの結果のみ出力されてcの結果はありませんでした。これは二番目のgrepを
> 起動したときにcのサイズが0となるためですね。grep test cの処理は行なわれる
> がサイズ0のため、結果もなしと。
>
> > また、grepの出力はバッファリングされず、grep が出力したものはすぐにcに
> > 出力されるものとします。 ← ここが肝です。
>
> もしa、bにtestと記述されている行がgrepのバッファ以上に大きければ、
> 1) cにa、bの結果がバッファを溢れて反映
> ↓
> 2) grep test で cが検索対象となる(cには、すでにバッファ以上の内容が入っている)
> ↓
> 3) cにc自身の結果が追記
> ↓
> 4) cに追記された内容がさらにgrepが検索、バッファを溢れcに追記
> ↓
> 以後3)と4)の繰り返しで処理が終わらない

ふむふむ、c の読み込み処理に入ったときに、その前のファイルの
grep で c に書きこまれているデータのサイズがファイルシステムの
ブロックサイズ(4kB)を超えているかどうかが、終了とループの分かれ
目になりそうですね。
c の最初の読み込みで EOF を検出できないから close せずに処理
して書き込みを行なう。このケースでは c に書きこまれているデー
タは全件マッチするから、もう永遠に EOF には追いつけない。
これが 4kB 以内に EOF がみつかれば無事終了。

$ grep X-Miler [1-9]* > x-mailer.txt
で無問題なんですけどね。

--
kazz

投稿者 xml-rpc : 2004年11月30日 20:16
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/28445
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。