重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ファイルの入出力を勉強しているのですが、「ストリーム」
についての説明がうまく理解できません。
どなたか上手に説明できる人はいませんか。
よろしくお願いします。

A 回答 (4件)

 まず「STREAM=(FILE *)型の変数」というのは、明らかに誤解ですので補足しておきます。



 さて「シーケンシャル」についてですが、これは「順次的な」という意味で、「sequential access(順次アクセス)」「sequential logic(順序論理)」など、コンピュータ関連でも様々なところで使われています。

 また「シーケンシャルアクセス」とは「ファイルの先頭から順に連続的にアクセスする方法」で、通常のテキストファイルなどではこの方法でファイルアクセスを行います。

 これに対し「ランダムアクセス」とは「ファイル内の任意の場所をとびとびにアクセスする方法」で、対象となるファイルは、固定長のレコード構造を持っている必要があります。
 C/C++では、構造体配列をバイナリ形式でファイルに記録する場合に、ランダムアクセスが利用できます。

 次に「コスト」についてですが、ここでは「ランダムアクセスをすると極端に性能が低下する」という意味で使っています。もちろん、高度な技術によって性能をカバーすることが出来たとしても、その技術開発に多大なコスト(ここでは時間や人件費を指す)がかかってしまうことは言うまでもありませんね。
    • good
    • 0
この回答へのお礼

ご丁寧なご解答ありがとうございました。
おかげさまで理解することができました。

お礼日時:2001/07/12 11:45

leaz024氏がご指摘の通りです


STREAM=(FILE *)は間違いです
ただ私がCを勉強している時に読んだ本では
STREAM=(FILE *)と置き換えて読むと
すんなり理解できたもので・・・つい
ごめんなさい・・・
あと補足すると宣言したので
恐縮ですが補足させていただきます
> (FILE *)と言うことはファイルポインタと言うことでしょうか
ファイルポインタです
もっと精密にいうと FILE 型の変数へのポインタです
FILE *fp=fopen("fname","rt"); とした時の
fpの事を言っています
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
やっと理解することができました。

お礼日時:2001/07/12 11:46

 「ストリーム」とは、シーケンシャルにしかアクセスできないデータのことを指します。


(厳密には、ランダムアクセスできても非常にコストが高いものも含みます。)

 例えば、標準入出力は一切ランダムアクセスができないので、ストリームの代表格みたいなものです。
 また磁気テープを扱うテープドライブは、ランダムアクセスできなくはないが非常にコストが高いため、ストリームデバイスと呼ばれます。(テープドライブは、テープストリーマとも呼ばれます。)

この回答への補足

ありがとうございます。なんとなく分かってきました。
申し訳ありませんが、もう少し質問をしてよろしいでしょうか。
「シーケンシャル」とは一体どういう意味なのでしょうか?
 「コスト」とありますが、この語句は単純に「費用」と理解してよいのでしょうか?それとも「メモリがくう」などのほかの意味を含んでいるのでしょうか?
よろしくお願いいたします。

補足日時:2001/07/11 13:36
    • good
    • 0

英辞朗によると「STREAM=流れ」だそうです


プログラムの世界で言うSTREAMとは
「データの流れ」そのものを抽象化して言うのではないでしょうか・・・って変な言い方ですね
正確かどうかはわかりませんが
STREAM=(FILE *)型の変数
と考えて良いのではないでしょうか
stdioやstdout,stderrも(FILE *)でストリームです
(UNIXではファイルハンドルと称してintを用いますが
その番号はストリーム配列の添字でしょうから
結局は同じでしょう)
・・・
よけい分かりにくくなったら御免なさい・・・m(_ _)m
回答の的をはずしている様でしたら補足要求を下さい
できる限り補足いたします

この回答への補足

ありがとうございます。
(FILE *)と言うことはファイルポインタと言うことでしょうか?
しつこくて申し訳ありませんが、お願いいたします。

補足日時:2001/07/11 13:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!