No.15344![]() |
メモリに対してストリーム 投稿者---Jum(2004/07/08 15:20:05) |
||
こんにちは。Jumです。 ファイル入出力において FILE *pFile; を使用しますが、この対象をメモリにはできないものでしょうか? メモリに対してストリーム処理を行いたいと考えています。 C++ではなくCで実現可能なのでしょうか? 以上宜しくお願い致します。 |
No.15345![]() |
Re:メモリに対してストリーム 投稿者---nop(2004/07/08 15:51:44) |
||
>ファイル入出力において > > FILE *pFile; > >を使用しますが、この対象をメモリにはできないものでしょうか? >メモリに対してストリーム処理を行いたいと考えています。 まずは、自分で調べろ。 Yahoo検索結果 |
No.15346![]() |
Re:メモリに対してストリーム 投稿者---Jum(2004/07/08 16:01:21) |
||
> まずは、自分で調べろ。 半日調べたがわからんかったので書いてます。 検索語句が悪かった模様… 今度からどの検索エンジンでどんな語句で検索したかも書こう… とりあえずズバリの内容があったので助かりました。 ありがとうございました。 |
No.15349![]() |
Re:メモリに対してストリーム 投稿者---円零(2004/07/08 18:12:37) |
||
これですか? 過去ログ対策で貼っときます。 #include <stdio.h> void main(void){ char buf[1024] = {0}; FILE *fp; fp = fdopen(0, "wt"); setvbuf(fp, buf, _IOFBF, 1024); fprintf(fp, "hello!"); fclose(fp); printf("%s\n", buf); } しかし私には難しくて良くわかりません… fdopenの一つ目の引数は「開いているファイルへのハンドル」とヘルプにありましたが、 ここで渡している「 0 」はどこから出てきたんでしょうか? どこかの段階で、FILE構造体が自動的に作られているんでしょうか。 それとも、存在しないファイルへのハンドル? その場合、fdopenはどうやってポインタを返すんでしょうか。 |
No.15357![]() |
Re:メモリに対してストリーム 投稿者---ぽこ(2004/07/09 00:34:58) |
||
>ここで渡している「 0 」はどこから出てきたんでしょうか? 標準入力(stdin)のファイルディスクリプタは0です。 main()に入ったときに開いているので、 使用しているのだと思います。 >その場合、fdopenはどうやってポインタを返すんでしょうか。 エラーの場合はfopen()と同様、NULLを返すのでは? |
No.15394![]() |
Re:メモリに対してストリーム 投稿者---aki(2004/07/10 03:38:23) |
||
>これですか? 過去ログ対策で貼っときます。 >#include <stdio.h> > >void main(void){ > char buf[1024] = {0}; > FILE *fp; > > fp = fdopen(0, "wt"); > setvbuf(fp, buf, _IOFBF, 1024); > fprintf(fp, "hello!"); > fclose(fp); > printf("%s\n", buf); >} > >しかし私には難しくて良くわかりません… >fdopenの一つ目の引数は「開いているファイルへのハンドル」とヘルプにありましたが、 >ここで渡している「 0 」はどこから出てきたんでしょうか? >どこかの段階で、FILE構造体が自動的に作られているんでしょうか。 >それとも、存在しないファイルへのハンドル? >その場合、fdopenはどうやってポインタを返すんでしょうか。 この方法はまずいです。ストリームバッファを直接アクセスしてはいけま せん。規格によるとバッファの内容は常に不定です。ストリームバッファ はシステムコールを呼び出す回数を減らす目的で設置されます。つまりバ ッファの目的は利便ではなく効率です。sprintfの代用にしてはいけません。 |
No.15348![]() |
Re:メモリに対してストリーム 投稿者---See(2004/07/08 17:05:39) |
||
>まずは、自分で調べろ。 その言い方はひどいやろ。 |
No.15354![]() |
Re:メモリに対してストリーム 投稿者---YuO(2004/07/08 20:03:59) |
||
>ファイル入出力において > FILE *pFile; >を使用しますが、この対象をメモリにはできないものでしょうか? >メモリに対してストリーム処理を行いたいと考えています。 標準の範囲内では無理です。 範囲外の話をしたいのであれば,環境をちゃんと提示してください。 |
No.15393![]() |
Re:メモリに対してストリーム 投稿者---aki(2004/07/10 03:12:52) |
||
>こんにちは。Jumです。 > >ファイル入出力において > > FILE *pFile; > >を使用しますが、この対象をメモリにはできないものでしょうか? >メモリに対してストリーム処理を行いたいと考えています。 > >C++ではなくCで実現可能なのでしょうか? > >以上宜しくお願い致します。 C++なら std::stringstream クラスを使えばメモリとストリームを結び付ける ことができますが、Cではメモリとストリームを結びつけることはできません。 sprintfとsscanfが代わりの手段です。 |