ショッピングモール  


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.3105

linux環境でのfflush(stdin)の定義
投稿者---Bucker(2004/11/30 01:37:00)


linux環境(gcc)でCプログラミングを学んでいます。
早速ですが、fflush(stdin)の振舞を確認するため、以下のようなテストプログラムを書き試してみました。

#include <stdio.h>
                                                                                
int main(void)
{
    char    c;
                                                                                
    printf("input=");
    scanf("%c", &c);
    printf("%c\n", c);
                                                                                
    printf("input=");
    fflush(stdin);
    scanf("%c", &c);
    printf("%c\n", c);
                                                                                
    return 0;
}



で、動作確認をすると以下のようになりました。
----- start -----
$./a.out[RETURN]
input=a[RETURN]
a
input=

------ end ------

この結果を見ると、fflush(stdin)がうまく働いていないように思えますが、linux環境ではfflush(stdin)の動作は一般的に不定義なんでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:linux環境でのfflush(stdin)の定義 3106 あかま 2004/11/30 06:52:38


No.3106

Re:linux環境でのfflush(stdin)の定義
投稿者---あかま(2004/11/30 06:52:38)


>linux環境ではfflush(stdin)の動作は一般的に不定義なんでしょうか?
linux環境ではなく、標準のCでは未定義です。
stdinが使えるのは独自拡張した環境だけですね。

http://www9.plala.or.jp/sgwr-t/lib/fflush.html



この投稿にコメントする

削除パスワード

No.3111

Re:linux環境でのfflush(stdin)の定義
投稿者---Bucker(2004/11/30 12:25:41)


>linux環境ではなく、標準のCでは未定義です。
>stdinが使えるのは独自拡張した環境だけですね。
そうだったんですか。じゃあfflush(stdin)は一般的に使わない方がいいということですね。
fflush(stdout)は確実にストリームバッファがフラッシュされると思っていいのでしょうか?


この投稿にコメントする

削除パスワード

No.3112

Re:linux環境でのfflush(stdin)の定義
投稿者---NykR(2004/11/30 12:39:59)


>そうだったんですか。じゃあfflush(stdin)は一般的に使わない方がいいということですね。

flushというのは「流す」という意味ですね。
引数には流れ着く先を指定するわけですね。
# 流れ出す元は引数に結びつけられたバッファ。

という風に考えると引数に入力ストリームを指定するのは実はおかしいということがわかるのではないでしょうか。

>fflush(stdout)は確実にストリームバッファがフラッシュされると思っていいのでしょうか?

いいです。


この投稿にコメントする

削除パスワード

No.3116

Re:linux環境でのfflush(stdin)の定義
投稿者---Bucker(2004/11/30 17:29:38)


>flushというのは「流す」という意味ですね。
>引数には流れ着く先を指定するわけですね。
># 流れ出す元は引数に結びつけられたバッファ。
>という風に考えると引数に入力ストリームを指定するのは実はおかしいということがわかるのではないでしょうか。
おかしいですね、確かに。理解が深まりました。ありがとうございました。


この投稿にコメントする

削除パスワード

No.3113

Re:linux環境でのfflush(stdin)の定義
投稿者---かずま(2004/11/30 13:18:29)


> fflush(stdout)は確実にストリームバッファがフラッシュされると思っていいのでしょうか?

確かに、ユーザ空間のストリームバッファはフラッシュされますが、
stdout がディスク上のファイルの場合、fsync(fileno(stdout)); を
実行しないと、カーネル空間内でまだメモリ上にブロックデバイスの
バッファリングとして残っている可能性があります。


この投稿にコメントする

削除パスワード

No.3115

Re:linux環境でのfflush(stdin)の定義
投稿者---Bucker(2004/11/30 17:24:54)


>確かに、ユーザ空間のストリームバッファはフラッシュされますが、
>stdout がディスク上のファイルの場合、fsync(fileno(stdout)); を
>実行しないと、カーネル空間内でまだメモリ上にブロックデバイスの
>バッファリングとして残っている可能性があります。
上記の点に付いては心得ています。ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity