回答:
ファイル全体を読み取り、行末の数をカウントします。行末を数えるのは本当に安いです。費やされる時間のほとんどは、ファイルの読み取りです。ファイルが(ほとんど)バッファキャッシュにある場合、それも安くなります。それ以外の場合は、ファイルストレージの速度によって異なります。
つまり、魔法はありません。
WCは、ファイルをrawバイトのブロックで読み取るだけです(ファイルが配置されている基本のファイルシステムの自然なブロックサイズの倍数が望ましい)。
次に、行末文字をカウントしてバッファをスキャンします。(-l出力以外の情報が必要な場合に備えて、スペース、タブ、フォームフィード、その他の特殊文字もカウントされます。)
ディスクからの読み取りは、速度の点でコストのかかる部分です。それに比べて、バッファのスキャンには無視できるほどの時間がかかります。
たとえば、1行あたり平均100文字の9000万行があるとします。
それは約9.000.000.000文字または約860 MBです。
SATA-3Gb / sドライブを備えたまともなPCなら、10秒未満で完了します。比較的遅いファイルシステムでも、他のアクティビティが同時に進行している場合。
パフォーマンスチューニングと最適化されたファイルシステムを備えた高速マシンは、SATA-6GやSSDドライブに頼らなくても、5秒未満で実行できます。
\n
)文字をカウントするバッファをスキャンするだけです-"-l、--lines print newline counts \ n \"-Extracted fromwc.c
wc -l
ました..申し訳ありませんが、.. について質問したので申し訳ありません...
フリーソフトウェアの世界へようこそ。あなたはいつでもソースコードを見ることができます
私はCプログラマではないことを認めざるを得ませんが、私は実際にコードを説明できる人ではありません(私は私自身に興味を持っています)。
私が知っていることは、wcはファイル自体を開かず、OSにそれを開くように要求するため、これはOSに、そしてもちろんファイルがどのように格納されるかに大きく依存します。それとは別に、ファイル全体を一度に読み取ろうとしないなど、正しいプログラミング方法が整っている必要があると思います。