まず、cat標準出力に書き込みます。これはcat、対話型シェルへのコマンドの一部として入力された場合でも、必ずしも端末ではありません。標準出力がリダイレクトされても端末に何か書き込む必要がある場合、それはそれほど簡単ではありません(どの端末を指定する必要があり、スクリプトからコマンドを実行する場合は端末がない場合もあります)コマンドが単にパイプラインの一部である場合、標準エラー出力を使用(ab)できます。しかし、あなたはcat実際に仕事をすることを示したので、あなたはそのような状況について尋ねていなかったと思います。
標準出力に書き込まれた内容をパイプラインに送信することが目的である場合、使用は猫の役に立たない賞のcat対象となります、cat file | pipeline(pipelineパイプラインを表す)はとしてより効率的に実行できるため、<file pipeline。しかし、繰り返しますが、あなたの言葉から、これはあなたの意図ではないと推測します。
だから、あなたが心配していることはそれほど明確ではありません。もしあなたが見つけたらcat入力が長すぎるは、1文字または2文字のエイリアスを定義できます(標準のUnixでは未使用のままの名前がまだいくつかあります)。しかし、それがcat無駄なサイクルを費やしていることを心配しているなら、そうすべきではありません。
null引数を取らず、標準入力(パイプラインのニュートラルオブジェクト)に標準入力をコピーするだけのプログラムがある場合は、で何ができますか<file null。このようなプログラムはありませんが、簡単に記述できますが(1行のmain関数のみを使用するCプログラムでジョブを実行できます)、cat引数なしで呼び出したcat -場合(または明示的に指定したい場合)は、それだけです。
あった場合にはnocatできない場合は正確に一つのファイル名の引数を取るプログラムは、ファイルを開こうとし、それを文句を言うと、そうでない場合は標準出力にファイルからコピーに進み、その後、それはあなたが求めているだけで何だろう。書くのは少しだけ難しいnull、ファイルを開いたり、テストしたり、場合によっては文句を言ったりする主な作業です(細心の注意が必要な場合は、引数が1つしかないテストを含めて、文句を言うこともできます)。しかしcat、ここでも、単一の引数が提供され、まさにそれを行うため、nocatプログラムは必要ありません。
nocatプログラムの作成に成功したら、なぜ単一の引数で停止するのですか?コードをループにラップすることfor(;*argp!=NULL;++argp)は実際にはまったく労力を必要とせず、バイナリに最大2つのマシン命令を追加し、間違った数の引数について文句を言う必要がなくなります(これにより多くの命令が不要になります)。Voilàの原始バージョンcat、連結ファイル。(正直に言うと、引数なしで動作するように少し調整する必要がありますnull。)
もちろん、実際のcatプログラムでは、彼らは常にいくつかの機能を追加しました。しかし、本質はcat、プログラマーにとっても、それを実行するマシンにとっても、「連結」の面ではまったく労力がかからないということです。そのようなプログラムが存在しないことをcat包含nullしてnocat説明するという事実。cat結果がパイプラインに入る場合、単一の引数で使用することは避けてください。ただし、ファイルの内容を端末で表示するためだけに使用される場合は、リンク先のページでも、catいますので、heしないでください。
あなたは、最初の位置ではなく、1つの無効な名前の中でいくつかのファイル名で呼び出すことによってcat、仮想nocat機能の周りの単純なループによって実際に実装されていることをテストすることがcatできます:このファイルが存在しないとすぐに文句を言うのではなく、cat最初の有効なファイル、および無効なファイルについて不平を言います(少なくとも、これは私の猫の動作です)。