タグ

2010年9月24日のブックマーク (1件)

  • ls(1)の実装からみるUNIXとPlan 9の思想の違い - Plan9日記

    lsはもっとも使用頻度の高いUNIXのコマンドだろう。あたりまえに使っているlsだが、よく考えると不思議な挙動がある。具体例を示すと、lsとls | catの出力が異なるのはなぜだろうか? lsの出力はターミナルの幅に合わせて多段に表示されるが、パイプを介す、またはリダイレクトすると1ファイル=1行になる。これは出力をwcやgrepなどにわせるような連携を考えると当たり前の挙動だ。でも、このような挙動の違いはどこから来るのだろうか。答えは簡単で、ls内部で標準出力がターミナルかどうかをチェックして動作を変えているのである。NetBSDのls.cを見てみると、ls_main関数の先頭でisatty(3)を使って標準出力がターミナルなのかチェックしている。 一方、Plan 9では、lsとls | catの出力は同じである。そして、lsが出力を多段組みする機能を持たない代わりに、lcという別コ

    ls(1)の実装からみるUNIXとPlan 9の思想の違い - Plan9日記