![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.2ベストアンサー
- 回答日時:
「振り返ってみると、私がベル研究所でUNIXに触れたのが1975年、日本への初めての導入契約を結んだのが1976年、そして実際に手元のミニコンでUNIXを使い始めたのが1977年だったから、かれこれ10年になる。
この間にUNIXは大幅に強化され、一段とすぐれたOSになったが、驚いたのは、UNIXが当初誰も予想しなかったほどに普及しつつあることである。・・・
本書は、主として、1979年以後の32ビット型コンピュータ向けのUNIXに関する論文を集めたものになっている。これらの論文の中で、最近までの実用化と関連の深いテーマをあげると、ビットマップ・ディスプレイ端末Blit、C++プリプロセッサ、IBM大型機UNIX、それにUNIXの開発者であるRitchieのストリーム入出力などがある。
・・・
このうちBlitについては、先日ベル研を訪ねて、Ritchie氏やKernighan氏らに会ったときに、彼らが実際にBlitマルチウィンドウを通してUNIXを使う様子をじっくりと見せてもらった。とくにユーモラスで面白かったのは、Blit端末を使用している間に、誰かからのメイルが届くと、発信者の小さな顔写真が画面の上に表示されることと、顔写真が登録されていない人の顔は黒メガネのギャング風のパターンとして表示されることである。文字ディスプレイではこんな芸当はできない。
・・・
私が最後にあげたRitchieのストリーム入出力のアイデアは、1986年6月に発表されたシステムVのリリース3.0で見事に花開いた。3.0の入出力やネットワーク機能を抽象化して、ハードウェアやプロトコルとは独立な形で応用プログラムを書くことも可能にするため、ストリーム方式が全面的に採用されているからである。従来のUNIXの特徴のひとつだったパイプライン機構では、データの流れは一方向に限られているが、ストリームでは、データは双方向に同時に(全二重的に)流せる。今後のプログラマにとっては、パイプラインと並んで、ストリームについての理解は恐らく必須になることであろう。」
(「UNIX原典」(AT&Tベル研究所編/長谷部紀元, 清水謙多郎 訳、1986年パーソナルメディア刊)監修者まえがき(石田晴久)より)
ストリームは抽象的な概念であり、それを心底納得するのはなかなか難しいと思います。
ストリームと言われると、何となくイメージ化して捉えないと落ち着かないところがありますが、ストリームとは入出力用ファイルポインタの別名だと割り切って、先に進む方が良いのではないかと思います。
どうしても納得したいと言う場合は、抽象的な概念なので、その概念を考え出したデニス・リッチー(UNIXとC言語の創造主)本人による原論文を読むのが一番良いと思います。内容は高度で難しいですが、分からなくても読んでみると、読んでいくうちに、なるほど!と深い理解が得られます。
「ストリームとは、ユーザ・プロセスとデバイスまたは擬似デバイス間の全二重結合のことである...」
(A Stream Input-Output System. by D.M.Ritchie)
ストリームはこういうもの!という物ではないんですね。初めの内はstdinという名前から想像して関数的な何かかな?と思っていました(アホすぎる・・・)。stdin等が理解できなかったのですが、
>>ストリームとは入出力用ファイルポインタの別名
でMSDNに書いてあったstdinの解説の意味がわかりました。
回答ありがとうございました!
No.1
- 回答日時:
"標準ストリーム"という概念の背後には、
プログラムに対してある"モデル"が存在します。
プログラムとは
"入力を受け取り、処理をして、出力をするものだ"
というモデル(考え方)です。
たとえば、
入力データを受け取って、
並び替えて
出力する
という感じです。
これは
入力 ==> (処理) ==> 出力
へとデータが流れていく
という風に考えることもできます。
この”流れ"をストリームと言います。
ストリームとはあまりに抽象的です。
実際に使う際には
どこから”入力"して
どこへ"出力"するか
を決めなければなりません。
元々、コンピュータはタイプライターのような使われ方をしてきました。
タイプライタは紙に出力しますが、
コンピュータの場合は”ディスプレィ"に出力します。
入力装置はともにキーボードです。
この場合、データは、キーボードから入力され、ディスプレイに出力されます。
キーボード ==> (処理) ==> ディスプレィ
と流れます。
これが最も基本的な流れなので
"標準ストリーム"
と呼ばれます。
この場合
キーボードは"標準入力"
ディスプレィは"標準出力"
と呼ばれます。
コンピュータは、タイプライタよりはるかに賢いので、
入力はキーボードに限りません。
ファイルから読み込ませることも可能です。
また出力先も同様に
ファイルやプリンタに切り替えることができます。
このように標準の入出力先を切り替えることを
"リダイレクト"
と呼びます。
また、ある処理の出力を別の処理の入力にすることも可能です。
例えば
処理1) "A"で始まるファイルをリストアップする
処理B) ファイルの大きさTOP10を表示する
という2つの処理があったとします。
これらは、元々別の処理としてあり、独立して使われます。
しかし、処理Aの出力を処理Bに"そのまま流す"ことで
"A"で始まるファイルの大きさTOP10を表示する
ことが可能です。
この様にある処理結果を次の入力に"そのまま流す"
ことを"パイプ"と呼びます。
パイプはいくつもつなげることができます。
こうすることで、
”シンプルな処理を組み合わせて、複雑な処理を行わせる"
ことが可能になります。
このことは、
プログラミングの基礎となっています。
ではprintfなどはその標準入出力を扱っている関数なんですね。ストリームは流れで、入出力は概念ということです・・・ね?成るほど。よくわかりました。回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- 物理学 流体力学の勉強方法 2 2023/04/25 23:18
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- 外国株 SBI証券でidecoを検討しています。 SBI証券ホームページ(https://go.sbisec 1 2022/10/10 16:06
- アンテナ・ケーブル ACアダプタのDC延長ケーブルを探しています 5 2022/04/18 21:04
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- 小学校 小学2年生の子の成績 3 2022/04/06 10:00
- 統計学 直線の傾き(回帰係数)から相関係数を計算できるのでしょうか? 2 2022/09/16 19:28
- Java Java 年数計算 3 2023/01/28 10:52
- Amazon Amazonの「標準的なカスタマーレビュー」の意味は何ですか? 2 2023/07/06 06:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Acccess レポートをグループ別...
-
Wordマクロで指定したフォルダ...
-
AccessVBA複数レポート条件毎に...
-
(VBA)書式が変更されてしまい...
-
コマンド(例えばls)の出力結果...
-
標準出力とファイルに効率的に...
-
C++ fprintf_sの使い方がわからん
-
テキストファイルに改行コード...
-
pcap形式データをテキストへ抽出
-
ファイル比較について
-
C++ Builderでファイル出力した...
-
CSVファイルを任意の場所に出力...
-
fortranのtxtファイル出力書式...
-
アプリを実行すると、作成者を...
-
ファイルの文字コードをUTF-8に...
-
ファイル出力の場所を指定
-
printfだと出力されるのにfprin...
-
外国語とCSVについて
-
CBool関数について VB6とVB.net...
-
OpenOfficeのdocがネットプリン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
VC++でUTF-8のファイルを出力し...
-
Acccess レポートをグループ別...
-
ファイル出力の場所を指定
-
ファイル形式またはファイル拡...
-
シェルコマンドの 2>&1 とはど...
-
Wordマクロで指定したフォルダ...
-
テキストファイルに改行コード...
-
fwprintf()について
-
二次元配列をクリップボードに...
-
外国語とCSVについて
-
ファイルの文字コードをUTF-8に...
-
csvファイルでの出力について
-
C言語での印刷方法
-
(VBA)書式が変更されてしまい...
-
フォルダにあるPDF情報の抽出(VBA)
-
C言語での縦方向のファイル出力...
-
CSVファイルを任意の場所に出力...
-
標準出力とファイルに効率的に...
-
CreateProcess関数と実行後の戻...
おすすめ情報