• 締切済み

ストリームって?

プログラミングの超初心者なのですが、現在Cの勉強をしています。1つ分からない言葉があるのですが、「ストリーム」について教えてください。例えば「ファイルストリーム」「標準エラー出力ストリーム」「標準入力ストリーム」などです。この「ストリーム」という動作はどういった動作をさすのか教えていただければ幸いです。

みんなの回答

  • m_ino
  • ベストアンサー率0% (0/0)
回答No.2

C言語の世界では、プログラムとファイルの間のデータの流れの経路のことをストリームと言います。(C言語辞典より) プログラムでファイルを開くと、ファイルとプログラムはストリームで結ばれて、その 経路をデータが行き来(入出力)されるわけです。逆に言うと、ストリームを介さないと、データの入出力はできません。  プログラムから見ると、データを必要とする場合は、ファイルでは無く、ストリーム からデータをもらいますし、データを出力するときは、ストリームにデータを送る訳です。         --------------------------            プログラム    ← [データ] →   ファイル         --------------------------                     ストリーム(経路)  なお、標準入力、標準出力、標準エラー出力ストリームは、実際はファイルでは無く、キーボードや画面だったりしますが、C言語ではそれらもファイルと同じ様に扱われます。  ・標準入力ストリーム  基本的にキーボードからの入力(入力専用のストリーム)  ・標準出力ストリーム  基本的に画面への出力    (出力専用のストリーム)  ・標準エラー出力ストリーム 基本的に画面への出力  (出力専用のストリーム)    ※ 通常の出力と、エラー出力を区別するために2種類用意されています。    ※ これらのストリームはファイルと違い、プログラムが動作する時点で      開いているので、原則としてファイルオープン、クローズ等は意識し      なくても使用できます。    理解しにくいところがありましたら、すみません。

参考URL:
ANSI C言語辞典
chi-bow
質問者

補足

御礼が遅れてしまい申し訳ありません。 たいへんわかりやすい説明をしていただいて、本当にありがとうございます。 さすが関係者はちがう!っていう感じで、よく理解できました。 これからもプログラムについていろいろ質問するかもしれませんが、 そのときはまたよろしくお願いします。

noname#25358
noname#25358
回答No.1

 ストリームという単語そのものは「流れ」という意味で、データの流れを川の流れに例えてあるのです。  たとえば、川に木材を流して下流に届けることを考えてみます。川がストリーム、上流はあなたのプログラム、下流はファイルや標準出力などです。  あなたは、自由自在に木材を川に流すことができますが、川の流れを途中で制御することはできません。また、相手も木材を受け取ることはできますが、同じことが言えるわけです。  このようにただ、垂れ流し的にデータを流すような構造を「ストリーム」と呼びます。  ファイルストリームは相手がファイルになるもの、標準ストリームは相手がコンソール(画面とキーボードを合わせた言い方)です。  また、出力の場合、自分がデータを流すわけですから相手は下流におり、入力の場合は相手が上流にいてあなたは上流からデータを流します。  なお標準エラー出力ストリームとは、エラーを専門に扱い、かつ出力専用の標準ストリームのことです。  説明がわかりにくかったら補足にそう書いていただきたいと思います(^^;゚。

関連するQ&A

  • ストリーム テキスト

    初心者の質問です。よろしくお願いします。 Javaのストリームを勉強しているのですが、FileReaderでテキストファイル(txt)を入力するにはどうすれば良いのでしょうか? Javaファイルは正しく入力できたのですが。 FileReader fr=new FileReader(args[0]);では、問題があるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • ストリームについて具体的に

    ストリームは入出力装置へのアクセスのための情報を抽象化した抽象データ型だそうですが(Wikipediaより)、それは具体的にどうなっているのですか?FILE構造体のようなものでしょうか。 ・ストリームにはどんな情報が入っているのですか? ・ストリームはどこに展開されているのですか?メモリでしょうか。 あと、プログラミングは初心者なのでチンプンカンプンな質問をしているかも知れません。その場合は「何か勘違いしてますよ~」と指摘してくださると嬉しいです。回答お待ちしています。

  • ファイルを開く、ストリームを結びつける、とは?

    C言語の標準関数の説明の中に、 「ファイルを開く」 「ストリームと結びつける」 といった表現がでてくるのですが、これはどういう意味ですか? freopenを理解しようとしていたのですが・・・。 ファイルを開くとはFILE構造体を展開する?ファイルディスクリプタをシステムに登録する?・・・意味がいまいち掴めません。「ストリームと結びつける」も同様です。 これらは具体的にどういう意味なのでしょうか?回答よろしくお願いします。

  • アセンブリ言語とC言語について。

    以下のURLで、 https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al … No.14のC 言語の write の仕様そのもので、第一引数はファイルディスクリプタですね。 (ファイルディスクリプタについては御自身で調べてみてください) 固定値として定義されているのは、標準ストリーム ファイルの  0 … 標準入力 (write では使われない)  1 … 標準出力  2 … 標準エラー出力 です。(3 以降は各プロセスでオープンされたファイルやソケットやデバイスを 指しており、固定値ではなくプロセス毎に異なる値となります。) 括弧の所がよくわかりません。教えていただけると幸いです。すみません。

  • アセンブリ言語について。

    以下のURLで、 https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al … No.14のC 言語の write の仕様そのもので、第一引数はファイルディスクリプタですね。 (ファイルディスクリプタについては御自身で調べてみてください) 固定値として定義されているのは、標準ストリーム ファイルの  0 … 標準入力 (write では使われない)  1 … 標準出力  2 … 標準エラー出力 です。(3 以降は各プロセスでオープンされたファイルやソケットやデバイスを 指しており、固定値ではなくプロセス毎に異なる値となります。) 括弧の所がよくわかりません。教えていただけると幸いです。すみません。 ファイルディスクプリタとは、ファイルへの通り道につけられる番号でファイルを識別する目印のことでしょうか?プロセスとは処理のことでしょうか?詳しく教えていただけると幸いです。すみません。

  • 【C++】ストリームオブジェクトを切り替える方法に

    ただ今C++を勉強中です. 関数を作成する際,引数を以下の様にして出力先を切り替えるようにしています. void Function(ostream &out) {    out << "文章"; } 引数を変えることで,標準出力やファイル出力を選択出来て重宝しています. でも,最近はある条件の時はどこにも出力させないという処理は出来ないかと考えております. 例えば, 条件がAの時はcout, 条件がBの時はfout, 条件がCの時は出力させない と言ったようにです. 何か良い方法はあるでしょうか? 引数にostreamを入れた様々な関数を多用しているため, お手軽にできたら幸いです. お願い致します.

  • csvファイルでの出力について

    C言語初心者です。 プログラミングにおいて質問なのですが、csvファイルを読み込み、 そのデータを用いて計算し、csvファイルで出力するという問題なのですが、C言語においてcsvファイル形式で出力するにはどのような方法がありますか? 補足:ラベル行に全角文字を入力しないといけません。

  • ファイルストリームからファイル名とパスの取得

    例えば、 ofstream file( "ttt.txt" ) としてファイルストリームを作った後で、このインスタンスを使ってfileが指しているファイルのファイル名やファイルのパスを取得することはできるのでしょうか。C及びC++の勉強をしていまして、できればOSやコンパイラに依存しない方法があれば知りたいと思っております。また、WindowsXP、VC++6.0(MFCは使っていません)を使っていますので、これらに依存した方法があるようでしたら教えていただけないでしょうか。お願いします。

  • C言語

    お世話になります。 プログラミング初心者です。 プログラミング用フォルダを作成をして Cドライブの中にMyCというフォルダを作成したので コマンドプロンプトを起動して md c:\MyC と入力したのですが サブディレクトリまたはファイル c:\MyCは既に存在します。 というエラーが起きました 何をしても治りません。 解決方法を探したのですがよく理解できません パスも一応通しました 入門通りにやったのですがどうもうまくいきません どうすればいいですか? 回答まってます。 ちなみに動作環境はwindows7です

  • ストリームでのアバウト(?)な検索

    Javaでストリームを少し扱い始めたのですが、少々行き詰ってしまいました。 例えばtext.txtというファイルの内容が 1 100 A だとして、Java側が1~100の間の数値を入力した場合には 「A」を出力する、といった感じにしたいのですが、文字列検索まではどうにかなるのですが 1~100の間の数字となると、文字列検索とはまた別の構文が必要な気がするのですが、それが全く分かりません。 If文を使わないでこのような構文を書く場合どうすれば良いのでしょうか。 分かりにくい文章ですが、どうかお知恵をお貸しください。

専門家に質問してみよう