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

このQ&Aに関連する最新のQ&A

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で質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q時間のAM/PM表記について

時間の表し方について教えてください。
amやpmを使った場合、
時間の前につけたらよいのでしょうか、
それとも後ろにつけたらよいのでしょうか・・・

たとえば朝7時30分は

am7:30
7:30am

どちらが正しい表記の仕方なのでしょうか、
教えてください。

Aベストアンサー

後ろにつけるのが正しいです。

因みにExcelでの12時間表記は
『AM・PM』を時間の後ろにつけないと
標準としては時間のデータとして認識しません。

Q標準ストリームが理解できません

標準ストリームの意味が理解できず困っています。
色々なサイトを回って調べてみたのですが、あるサイトではデータが通る経路だと書かれていたり、またあるサイトでは入出力装置から情報を受け取ったり情報を渡したりするということだ、と書かれていたりなにが正しいのかさっぱりです。
普通に標準入出力関数とかは使ってきましたが、stdin等は理解しておく必要がありますよね?標準ストリームは具体的にどういう物か教えていただけたらうれしいです。回答お待ちしています。

Aベストアンサー

「振り返ってみると、私がベル研究所で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)

「振り返ってみると、私がベル研究所でUNIXに触れたのが1975年、日本への初めての導入契約を結んだのが1976年、そして実際に手元のミニコンでUNIXを使い始めたのが1977年だったから、かれこれ10年になる。この間にUNIXは大幅に強化され、一段とすぐれたOSになったが、驚いたのは、UNIXが当初誰も予想しなかったほどに普及しつつあることである。
・・・
 本書は、主として、1979年以後の32ビット型コンピュータ向けのUNIXに関する論文を集めたものになっている。これらの論文の中で、最近までの実用化と関連の...続きを読む

Qam/pmの正しい表記について

普段何気なく使っている午前、午後を表すam,pmですが
どう表記するのが正しいのでしょうか?

大文字、小文字の他、
コンマが付いたり付かなかったり(am   a.m   a.m.)
時刻を表す数字の前だったり後ろだったり(AM8:00   8:00am)
いろいろなものを見かけます。

どなたかご存知の方、教えてください。

Aベストアンサー

手元の古い辞書には「特別な場合以外は小文字を用い、必ず数字を伴う」とあり、例として 4 a.m. と 3 p.m. が載っていました。
昔は時刻といっても、せいぜい「何時」までで、8:00 a.m. と「何時何分」まで正確に表現するようになったのは比較的最近の事なのかも知れませんね。

余談ですが、英人は「省略を表すピリオド」を省略する傾向があるように思います。

Qc++での入出力がうまくいきません;

初心者ですが独習c++でプログラミングについて勉強している者です。
なんとか環境設定もできたと思いきや、うまくコンパイルすることができなくて困っています。具体的には、
#include <iostream>
using namespace std;

int main()
{
int i, j;
double d;

i = 10;
j = 20;
d = 99.101;

cout << "値を表示: ";
cout << i << ' ' << j << ' ' << d;

return 0;
}
という値を表示するプログラムではコンパイルもうまくいったのですが、次の
#include <iostream>
using namespace std;

int main()
{
int i;

cout << "値を入力: ";
cout >> i;
cout << "入力した値: " << i << "\n";

return 0;
}
という入力のプログラムをコンパイルしようとすると、コマンドプロンプトに演算子が使われたクラス ostream では int型の定義が存在しないとなりコンパイルエラーとなってしまいます。
理由が考えてもわからないので、質問してみました。
どのようにすれば、このエラーを解消できるのか知りたいので、どうかご意見をよろしくお願いします。

初心者ですが独習c++でプログラミングについて勉強している者です。
なんとか環境設定もできたと思いきや、うまくコンパイルすることができなくて困っています。具体的には、
#include <iostream>
using namespace std;

int main()
{
int i, j;
double d;

i = 10;
j = 20;
d = 99.101;

cout << "値を表示: ";
cout << i << ' ' << j << ' ' << d;

return 0;
}
という値を表示するプログラムではコンパイルもうまくいったのですが、次の
#include <iostream>
using namespace std;

int...続きを読む

Aベストアンサー

エラーメッセージは無理に (かつでたらめに) 訳したりせず正確に書こう.
cout は「出力」です.

Qアメリカのテレビ番組、放送時間の表記、PM・AMが逆?

バカバカしい質問すみません。さっき、NBCのサイトで放送予定(Schedule)のページを見ていたのですが、PMとAMが逆になっているんですが、これはどういうことですか?

この回答を投稿したのが、午前11時なので、アメリカではおおよそ午後9時とか8時ですよね?(東部)。
ということは、表記は PM 9:00 になりますよね。NBCのサイトでは、NOW ON AIR(LIVE)の表示が 10:00 AMになっていました。それに、「グッドモーニングアメリカ」というABCの番組は、タイトルにそぐわない、午後8時という表記でした。

何か特別な表記が、アメリカには存在するのでしょうか?知ってる方がいれば、教えてください!

Aベストアンサー

日本時間 0755
LIVE 0730 からの NIGHTLY NEWS

ABCだと
PM1:37 から Nightline

固定的に表示すると、ユーザーの方が「時差換算」しないとならないので、ユーザーの時間(=PCの時間)にあわせているようですね

BBCは時差がないから
http://www.bbc.co.uk/bbcone

ON NOW - 23:55
Peter Kay's Car Share

なんていう表示

ロシアも アメリカと同じ方式
http://russia.tv/

Q【勉強中】文字入出力について【指導】

C言語を独学ではじめたばかりのものです。
以下のプログラムをコンパイル後、実行したのですが、
文字を入力し、enterを押しても反応がありません。

#include <stdio.h>

/* 文字カウント */

main()
{
long nc;

nc = 0;
while (getchar() != EOF)
++nc;

printf("%ld\n", nc);
}


このプログラムは『プログラミング言語C 第二版 石田晴久 訳』のp22に載っているものです。
Borland社のフリーコンパイラから実行しました。
なにも起こらないので、このプログラミングがどのような意味をもつのかもよくわかりません。

教科書には文字数を数えるためのもの。

と書いてあるのですが、どの文字数を数えているのかもさっぱりです。。。

こんな初心者ですが、なにか助言をいただけるとありがたいです。

Aベストアンサー

プログラミング言語C は、OSやコンピュータの操作やもう知っているものとして書かれている本です。あなたには高度すぎたのかもしれません。

このプログラムは入力の文字数を数えるものです。あなたが入力ファイルを何も指定しなかったので、キーボードから打ち込まれた文字を数えます。入力の終わりが来るまでは、ひたすら文字数を数えるだけなので見た目何の反応もないのは正常です。

キーボードから入力の終わりを知らせる方法はOSごとに異なります。
DOSやWindowsのコマンドプロンプトではコントロールZリターンです。

Q午前am 午後pm 夕方や夜の略号は?

スケジュールカレンダーを作ろうと思っています。

午前の枠を am 午後の枠を pm と表記させているのですが、
夕方、夜、は略号を使うとしたら、何を使いますか?

表示文字数の関係で、英語半角2文字しか表示出来ないので
どうしようかと思っています。

夕方は ev(evening) 夜は ni(night) ではおかしいですか?
他の人にも配るので、あまり変な略号ではいけないかなと思っています。
よろしくお願いします

Aベストアンサー

 AMを朝から昼までの午前、PMを昼から夕方までの午後、と考えていること自体が誤りです。

 AM/PMは、単に24時間を時計の12時間で表わすときの区別に用いるだけです。
 AMは、真夜中の12時(0時)から昼の12時まで、PMは昼の12時から真夜中の12時までです。
 これ以外の時間帯の識別記号は必要ありませんし、存在しません。

↓ ウィキペディアより引用:
「英語では午前と午後をそれぞれ ante meridian / post meridian といい(ラテン語の原形はそれぞれ ante meridiem / post meridiem であり、meridiem は昼の真中を意味するので、昼の中央の前、または後という意味になる。)・・・」


 小学生の「日課表」のように時間帯ごとに色分けしたいのなら、「朝&午前=morning」、「昼前=before noon」(ほとんど使いませんね)、「午後=after noon」、「夕方・宵=evening」「夜=nightI」「真夜中=midnight」、」、「未明=before dawn」、「明け方=dawn」、あたりから適当に表現すればよいのではありませんか?

 AMを朝から昼までの午前、PMを昼から夕方までの午後、と考えていること自体が誤りです。

 AM/PMは、単に24時間を時計の12時間で表わすときの区別に用いるだけです。
 AMは、真夜中の12時(0時)から昼の12時まで、PMは昼の12時から真夜中の12時までです。
 これ以外の時間帯の識別記号は必要ありませんし、存在しません。

↓ ウィキペディアより引用:
「英語では午前と午後をそれぞれ ante meridian / post meridian といい(ラテン語の原形はそれぞれ ante meridiem / post meridiem であ...続きを読む

Qregex関数を理解するには、何を説明すればよいか?

unixを使っているゼミにいます。c言語でregex関数の使い方や仕組みをゼミで発表しないといけないのですが、manのregcomp()やregexec()の解説を読んでも、
人に説明できるほどわかりません。まずregex関数を説明する上で、何を最初に説明すればいいでしょうか?
また、regcomp()などの関数のソースファイルなどがありましたら、教えてください。

Aベストアンサー

regex 使用例であれば、Google に regex、regcomp、regexec などのキー
ワードを入れて検索してみるだけでも結構見つかります。

中でも以下は比較的わかりやすく解説されているように思います。

http://sometime.minidns.net/~ccgi/posix_regex.html

> また、regcomp()などの関数のソースファイルなどがありましたら、教えてください。

http://ftp.gnu.org/glibc/

glibc (最新バージョンは 2.7) のソースコードを展開すると posix とい
うディレクトリがあるので、そこに regex のソースコードがあります。

ただし、非常に難解です。アルゴリズムなども含めて知る必要があるので
あれば、NFA や DFA というキーワードでも調べてみるとよいでしょう。

http://www2.starcat.ne.jp/~fussy/algo/algo7-5.htm

Qam pm の使い方

時刻を表現する am pm ですが、Spoken English では

am pmは使用せず、「Nine O’clock in the morning(午前9時)」

とか「Seven ten at night/in the evening(夜7時10分)」

と云うべきでしょうか? 

Aベストアンサー

シーンによると思います。

検定やテストとかだったら、過去の問題を確認した方がいいでしょう。

会話でしたら問題なく伝わると思います。

また、表記の仕方ですが、amの場合、ラテン語の「ante meridiem」が語源だそうなので、「a.m.」とするべきかと思います。
しかし、ネットで見る限り特にこだわり(?)はないようで、AMとか、Aだけの表記も見られます。

参考までにリンクを貼ります。

参考URL:http://en.wikipedia.org/wiki/12-hour_clock

QAPIの勉強・理解を目的とするサイトを紹介ください

定年後の趣味でプログラムをキコキコ作って楽しんでおります
主として .NET C++ベースでAPIを多用したユーティリティをやっております

ところが定年後に始めた趣味なので仲間・相談相手がおりません
分らない事柄が発生しても一人で悪戦苦闘しなければならず、簡単な障害を克服するにも時間がかかってしまいます

そこでAPIに関するコミュニティがあればと思い探しましたが見つかりません ← 実は検索法も下手糞なのです
適当なサイト、コミュニティをご存知でしたらご紹介願います
お願い申し上げます

Aベストアンサー

.NETでAPIと言うのが良くわかりませんが、.NETを使わずにAPI主体という意味でしょうか?
で、私もAPI専門のコミュニティは存じません。
ただ、幾つか質問できる掲示板があるのでご紹介しておきます。

「C言語何でも質問掲示板 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewforum.php?f=3
「Visual C++ Q & A掲示板」
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi


人気Q&Aランキング

おすすめ情報