[解決済み] FD_ISSETの仕組みは?
2022-02-12 08:04:36
質問事項
FD_ISSETは、ソケットがセットに入っているかどうかをチェックするとマニュアルに書いてあります。ということは
if (FD_ISSET(STDIN, &readfds))
stdinがセットされていればすぐにプリントアウトされるはずですが、実際には私がエンターキーを押すまで待たされます。何が足りないのでしょうか?
すでに設定されている
を呼び出したとき、プログラムは
FD_SET(STDIN, &readfds)
?
Enterキーではなく、他の文字を入力すると、command not foundと表示されるのはなぜですか?例えば、fgetsをするとき、他の文字と同じように扱われると思っていたのですが。
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#define STDIN 0 // file descriptor for standard input
int main(void)
{
struct timeval tv;
fd_set readfds;
tv.tv_sec = 2;
tv.tv_usec = 500000;
FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);
// don't care about writefds and exceptfds:
select(STDIN+1, &readfds, NULL, NULL, &tv);
if (FD_ISSET(STDIN, &readfds))
printf("A key was pressed!\n");
else
printf("Timed out.\n");
return 0;
}
解決方法は?
セレクトは、エンターまたはタイムアウトを待ちます。 FD_ISSETがエンターを待っているように感じるのは セレクトがタイムアウトした。
retvalを確認するとよりよく理解できます。
struct timeval tv;
fd_set readfds;
int retval;
tv.tv_sec = 2;
tv.tv_usec = 500000;
FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);
// don't care about writefds and exceptfds:
printf ("before select \n" );
retval = select(STDIN+1, &readfds, NULL, NULL, &tv);
printf ("after select \n" );
if (retval == -1)
perror("select()");
else if (retval > 0)
{
//if (FD_ISSET(STDIN, &readfds));
printf("Data is available now.\n");
}
else
printf("No data . timedout \n");
関連
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] コネクション・リセット・バイ・ピア」とはどういう意味ですか?
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
-
[解決済み】__attribute__((constructor))は具体的にどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】シンプルなC言語のscanfが機能しない?重複