- ベストアンサー
標準出力の意味
Linuxの初学者です。宜しくお願いします。 リダイレクトなどの説明で「標準出力」とあるのですが、 これはどういった意味なのでしょうか?。 ・コンソールに出力 ・/var/messagesファイルに出力 など出力先を選択することなのでしょうか。 「標準エラー出力」もあり、うまく理解ができず。。 アドバイスを頂ければ幸いです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
"出力" ”先” つまり、データーの表示先を切り替える事ができる、または選ぶ事ができるシステムでは、そのような言い方をする。 これと同じで、”入力先”も選べますね。マウスやキーボード、今では、タッチパネルなど。 将来は、出力先 => テレビ、腕時計、ヘッドセット、電子レンジ、エアコン、冷蔵庫、自動車 等、家電などの融合マシンになるでしょう。 へたすると、人間の脳なんてことになるかもしれません。実際、出力先を、人間の脳にして、腕、手を動かす義肢が実用化されています。 入力は、人間の脳が発する微弱な電流です。それを、義手の手のモーターの動作に替えています。テレビで実験で5本の指で物を掴む、握る、なんて動作をしていました。まるで映画の世界でしたよ。 実際にひじからしたが無い障害者に手伝ってもらって、実験していました。 で、”標準”とはですが、普通想定される、デバイスが”モニター” ですので、”標準” とは、”コンソール” つまり、シェルのメイン(アクティブ)に出力されます。 出力先を想定するということは、出力するデーターを規定のデータにそろえて、そこに合うように変換して、そのデバイスの規定通りにインターフェースに渡す事を言います。 つまり、入力側にも例えば、テレビの音、映像入力端子があるように、違うようになっていれば、別データーとして扱えるので、 エラー出力先も別ソケットに渡せば、想定されたデバイスに渡してくれるだけです。 ただ、コンピューターの世界ですので、たいてい論理デバイスである場合が多いです。 そういった意味で ”リダイレクト” とは論理デバイスに渡すソケットを、別ソケットにつけ変える事をいいます。 冷蔵庫とか、電子レンジのコンセントを壁にある、コンセントから、たこ足配線可能なタップに変えることと同じ事です。
その他の回答 (5)
Linuxではファイルやコンソールなど入出力の対象を、ファイルディスクリプタという番号で表します。標準とは、入力に0番、出力に1番のファイルディスクリプタを使う約束という意味です。 ファイルを開いたときディスクリプタが何番になるか、通常は前もって分かりません。ただしディスクリプタは複製でき、複製するとその時点で使っていない一番小さい番号が新たに割り当てられます(そういう機能をOSが提供しています)。 出力をファイルにリダイレクトするプログラムは ・まずファイルを開く。何番かのディスクリプタが割り当てられる。 ・1番(標準出力:デフォルトはコンソール)を閉じる。 この時点で最小の未使用番号は1番となる。 ・開いたファイルのディスクリプタを複製すると1番が割り当てられる。 ・1番に出力するとリダイレクト先のファイルに書き込まれる。 パイプによるリダイレクトも同じ要領です。パイプという特殊なファイルを作り、0番(標準入力)と1番(標準出力)を閉じて、それぞれパイプを複製すると0番と1番が接続されます。あとは出力側のプログラムが1番に書き出し、入力側のプログラムが0番から読み込めば通信できます。 つまり0番を入力・1番を出力と約束しておけば、わざわざ通信相手のプログラムにディスクリプタの番号を伝える必要がなくなり、プログラムが簡単になります。
お礼
有難うございます、内部ではそういった操作を しているのですね。勉強になりました。
- yakan9
- ベストアンサー率54% (2244/4125)
コンピュータの歴史を学ばないとピンとこないと思います。 パソコンの歴史はここ20年くらいです。 その前は大型コンピュータのタイムシェアリングサービスと言われるもので、個人の端末機器で大型コンピュータと接続して、そのリソース、すなわち、大型コンピュータセンタの機器を使って、コンパイル、リンケージ、実行といった課程でコンピュータを利用していました。 この時、表示の指示で、どこに表示するかの指示を出す際、画面に出すことでスピードが早い利点を基本としていました。 このときの既定値として、画面出力設定にしていたということです。 今でも、大学関係や、スーパーコンピュータを利用する場合は、端末機器で、大型コンピュータの並行処理を利用する場合は、タイムシェアリングを利用しています。
お礼
有難うございました。
- vaidurya
- ベストアンサー率45% (2714/5983)
MS-DOS全盛期だと、逆に標準出力は理解しやすかった気もしますね。 最小構成で、ちょっとしたテキストファイルを作る場合に COPY CON TEST.TXTとかやっていましたし COPY TEST.TXT PRNでプリントアウトする場合もありました。 ソフトウェアは、対話的に操作するものと、自動処理し自動終了するものに大別できます。 前者はアプリケーションソフトウェアやユーティリティーソフトウェアなどいくつかがあり… 後者は、コマンドと総称されます。 コマンドには、シェルの標準コマンドと外部コマンドがあるのは、MS-DOS系でもUNIX系でも同様です。 アプリケーションソフトなら、ファイルメニューから保存を選んだりするわけですが… コマンドは、処理するからには、その結果をどこかに出力する必要があります。 ですから、その結果をコンソールに表示するのが、その自然なカタチです。 MS-DOSでもDIRコマンドやCOPYコマンドなどの結果が画面に出力されます。 そして、標準出力は、なんらかのデバイスやファイルなどに変更できます。 また、標準入力としてのキーボードは、他のコマンドやなんらかのデバイスに変更できます。 (正確には他のコマンドとの受け渡しは、標準出力と標準入力が繋がるカタチで実現されます) MS-DOSでは、予約ファイル名というカタチで扱えるデバイスがいくつかあり… UNIX系OSでは、デバイスファイルとして扱うのが、ほとんどのデバイスの基本的操作手段です。 たとえば、関連する設定が整っていれば、cat /dev/video0 test.mpgでTV録画ができる場合もあります。 MS-DOSには、全盛期に録画システムなどなかったためもあり、こういう手段での録画はできません。 (Windowsでは録画専用コマンドを使うか、録画システムやアプリケーションソフトを必要とします) 指定しなければ、画面に表示するよってのが標準出力ですから バッチファイルやシェルスクリプトで何も表示しなくて良いよってときは MS-DOSでは出力先をNULに指定し、UNIX系OSでは/dev/nullに指定します。 表示しなくてもいいけど、記録はとっておきたいという時はリダイレクトでファイルに保存したりします。 記録管理を重視するなら、記録を日時を含むユニークなファイル名で蓄積しますが… 単純に、>>による追記リダイレクトで、一応保存しておくという使い方もあります。 UNIX系OSでは、歩きながら鼻歌を歌うくらいに、ごく当たり前に 自動処理/終了するコマンドを使い、また複数組み合わせて多様な処理ができます。 それは、それを前提にしたソフトが充実することによって成立しています。 たとえば、キーワード指定で自動録画された、たくさんのファイルの中から ls -lh *.ts|grep "ワンピース"|wc -l といった一行の処理で、指定したキーワードをファイル名に含むファイルの数を確認できます。 MS-DOS,Windowsで真似しようとすると、wcコマンドに相当するものが標準装備されていません。 まぁ、ほとんどにオープンソース実装があるから、MS-DOSへ移植されているものも多いんですけどね。
お礼
有難うございます、勉強になりました。
- vbvdv
- ベストアンサー率0% (0/1)
私も初心者ですが、テキスト処理系のコマンドをパイプでつないでみる(あるコマンドの標準出力を次のコマンドの標準入力につなぐ)ことでイメージがつかめました。
お礼
有難うございました。
- picknic
- ベストアンサー率25% (33/132)
標準出力はディスプレイ(コンソール) 標準エラー出力もディスプレイ(コンソール) がデフォルトで指定されています。 普通のメッセージはコンソール エラーメッセージはファイルに書き出したい というときは、 標準出力はそのままにして、 標準エラー出力をファイルにリダイレクトしたりして使います。 最初はこんな感じでいいと思います。
お礼
有難うございました。 出力先が「コンソール」の場合ですが これは具体的にあげるとすると、Teratermの画面とか、 そういったイメージでしょうか・・。
お礼
有難うございます。 「標準」とはデバイスだと「モニター」なのですのね・・。 ちなみに「シェルのメイン(アクティブ)に出力」とは、 具体的にはどういったイメージなのでしょうか。