- ベストアンサー
ストリームについて
ファイルの入出力を勉強しているのですが、「ストリーム」 についての説明がうまく理解できません。 どなたか上手に説明できる人はいませんか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず「STREAM=(FILE *)型の変数」というのは、明らかに誤解ですので補足しておきます。 さて「シーケンシャル」についてですが、これは「順次的な」という意味で、「sequential access(順次アクセス)」「sequential logic(順序論理)」など、コンピュータ関連でも様々なところで使われています。 また「シーケンシャルアクセス」とは「ファイルの先頭から順に連続的にアクセスする方法」で、通常のテキストファイルなどではこの方法でファイルアクセスを行います。 これに対し「ランダムアクセス」とは「ファイル内の任意の場所をとびとびにアクセスする方法」で、対象となるファイルは、固定長のレコード構造を持っている必要があります。 C/C++では、構造体配列をバイナリ形式でファイルに記録する場合に、ランダムアクセスが利用できます。 次に「コスト」についてですが、ここでは「ランダムアクセスをすると極端に性能が低下する」という意味で使っています。もちろん、高度な技術によって性能をカバーすることが出来たとしても、その技術開発に多大なコスト(ここでは時間や人件費を指す)がかかってしまうことは言うまでもありませんね。
その他の回答 (3)
- verdian
- ベストアンサー率75% (3/4)
leaz024氏がご指摘の通りです STREAM=(FILE *)は間違いです ただ私がCを勉強している時に読んだ本では STREAM=(FILE *)と置き換えて読むと すんなり理解できたもので・・・つい ごめんなさい・・・ あと補足すると宣言したので 恐縮ですが補足させていただきます > (FILE *)と言うことはファイルポインタと言うことでしょうか ファイルポインタです もっと精密にいうと FILE 型の変数へのポインタです FILE *fp=fopen("fname","rt"); とした時の fpの事を言っています
お礼
どうもありがとうございました。 やっと理解することができました。
- leaz024
- ベストアンサー率75% (398/526)
「ストリーム」とは、シーケンシャルにしかアクセスできないデータのことを指します。 (厳密には、ランダムアクセスできても非常にコストが高いものも含みます。) 例えば、標準入出力は一切ランダムアクセスができないので、ストリームの代表格みたいなものです。 また磁気テープを扱うテープドライブは、ランダムアクセスできなくはないが非常にコストが高いため、ストリームデバイスと呼ばれます。(テープドライブは、テープストリーマとも呼ばれます。)
補足
ありがとうございます。なんとなく分かってきました。 申し訳ありませんが、もう少し質問をしてよろしいでしょうか。 「シーケンシャル」とは一体どういう意味なのでしょうか? 「コスト」とありますが、この語句は単純に「費用」と理解してよいのでしょうか?それとも「メモリがくう」などのほかの意味を含んでいるのでしょうか? よろしくお願いいたします。
- verdian
- ベストアンサー率75% (3/4)
英辞朗によると「STREAM=流れ」だそうです プログラムの世界で言うSTREAMとは 「データの流れ」そのものを抽象化して言うのではないでしょうか・・・って変な言い方ですね 正確かどうかはわかりませんが STREAM=(FILE *)型の変数 と考えて良いのではないでしょうか stdioやstdout,stderrも(FILE *)でストリームです (UNIXではファイルハンドルと称してintを用いますが その番号はストリーム配列の添字でしょうから 結局は同じでしょう) ・・・ よけい分かりにくくなったら御免なさい・・・m(_ _)m 回答の的をはずしている様でしたら補足要求を下さい できる限り補足いたします
補足
ありがとうございます。 (FILE *)と言うことはファイルポインタと言うことでしょうか? しつこくて申し訳ありませんが、お願いいたします。
お礼
ご丁寧なご解答ありがとうございました。 おかげさまで理解することができました。