0

TCP プロトコルを使用してクライアント サーバー プロジェクトを作成しているため、クライアント コードには、サーバーからの write() を待機する read() を含む while ループがあります。

これは私が実際に尋ねている質問とは無関係だと思いますが、これが私の問題の原因です。つまり、クライアントがサーバーからの write() を待っている間、ユーザーは端末で文を入力して、入力バッファにスタックされているため、クライアントが最終的に write() を受け取り、read() から先に進むと、改行文字が見つかるまですべての文字をクリアする通常の方法では入力バッファをクリアできません。

while (getchar() != '\n');

ユーザーが待機中に多くの文を入力し、Enter キーを複数回押したためです。

内容に関係なく、入力ストリームを完全にクリアする方法はありますか?

私がこれまでに見つけたのは、私が使用できるということだけfflush(stdin)です。型にはまらないものの、私には機能しますが、使用できない場合もあります。

また、入力ストリームの終わりを次のように確認してみました。

while (getchar() != '\0');

しかし、無限ループに陥ります。また、read() の後の改行を無視する scanf() を使用してみました。

scanf("%[^\r\t\n]s", buf);

すべてがこのバッファに移動されるように、これも機能せず、最後に入力された文の最初の単語だけがそこに格納されます。

最後に、 fgets() をいじってみましたが、運もありませんでした。

PS read() 呼び出しの前に標準入力ストリームを完全に無効にして、すぐに再度有効にする方法はありますか?

編集:アーカイブの目的で、この時点で実際にプログラムをフォークして、入力をスキャンし続け、最初に述べた標準的な方法で即座にクリアしました。それでも、何が入っていても入力バッファを完全にクリアする方法があるかどうか知りたいです。

4

1 に答える 1