入力ファイルが出力ファイルになれないのはなぜですか?

入力ファイルが出力ファイルになれないのはなぜですか?

特にxとyがファイルの場合cat x y > ycat x >> x

「入力ファイルは出力ファイルです。」エラーが発生しない場合はどうなりますか?デフォルトでは、なぜこれらのコマンドを実行できないのですか?

ベストアンサー1

cat x y > ycp x yy(開始時間前に切り捨てられたため)と同じで、catその後にcat y >> y

cat x >> xこれは、ディスクがいっぱいになるか、ファイルシステムのファイルサイズ制限に達するまで無限ループになります(ファイルの末尾に追加し続け、再読み込みして再度追加するため)。

この「エラー」は、何もしなかったという意味ではなく、cat特定のファイルをスキップしたという通知にすぎません(GNUでは、cat少なくとも)。あなたはそれを実行することが「許可」されていますが、あなたが望むことをしないかもしれません。

このメッセージを生成するGNUテストは次のcatとおりです。

  1. 出力(fd 0)は通常のファイルです。
  2. デバイス(フィールド)とinode(フィールド)は、出力fdとチェックしている入力ファイルとst_dev同じですst_ino
  3. 入力ファイルのオフセットはファイルサイズより小さいです(空ではありません。この時点でオフセットがゼロでない場合は考えられませんが、おそらく1つあります)。

これらのすべてが適用されたら、診断情報を印刷して次の入力ファイルに移動します。

コマンドの一部のバージョンはcatこのチェックを実行しないため、これが発生する可能性があります。私は彼らが確認したが同じファイルであると言うことはできませんでしたが、一番上から1つを話すことはできないシステムを想像できます。どちらにしても悪く終わることがあります。実装がメモリにマップされたファイル全体を一度だけ書き込むと、catループの代わりにファイルが倍増する可能性がありますが、これはそれほど深刻ではありません。

おすすめ記事