C言語関係掲示板

過去ログ

No.1177 メモリに対してストリーム

[戻る] [ホームページ]
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が代わりの手段です。