2004年11月30日

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

白鳥です。

実際に、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)の繰り返しで処理が終わらない

といったことになるのですね。なるほど。自分としては、grepが一時的にどこかの
ファイルに処理を溜めておいて、最後に出力されるものだと思っていました。
実際にはバッファ以上の処理があった場合は、ただちにファイルに書き込まれて
しまうのですか。たしかに肝ですね。まさか、バッファを溢れた場合とそうでない
場合で結果が違うとは、考えてもいませんでした。

大変、勉強になりました。どうもありがとうございました。

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




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