

keventを使って標準入力の監視を行おうとしているのですが、タイムアウト時間を指定してもタイムアウトが働きません。
___struct timespec timeout;
___timeout.tv_sec = 0;
___timeout.tv_nsec = 0;
___EV_SET(&kev, fd, EVFILT_READ, EV_ADD, 0, 0, &timeout);
___ret = kevent(kq,&kev,1,NULL,0,NULL);
___printf("eventを待ちます\n");
___c = kevent(kq,NULL,0,&kev2, 1, &timeout);
___printf("監視終了\n");
としてfd(標準入力)を監視しています。標準入力を入れると反応するので監視自体は出来ているのですが、
何も入れなかった場合、タイムアウトせずにそのままキー入力があるまで待ち続けているみたいです。
タイムアウトの指定のやり方に間違いがあれば教えて欲しいです。
No.4ベストアンサー
- 回答日時:
試しにこっちでも作ってみました。
結果として言えそうなことは、
・EV_SETの第2引数(ident)が正しくない(監視対象stdinを示すfdでない)
・タイムアウトは何か値を入れないとまずそう(manでは0/0はポーリングと書いてあるが即時タイムアウトしなかった)
というところですね。
環境はFreeBSD7.0 / gcc4.2です。
#include <stdio.h>
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
int main(void)
{
int r;
struct kevent kset, kget;
struct timespec tout;
int kq = kqueue();
if(kq == -1)
{
perror("kqueue");
return -1;
}
EV_SET(&kset, 0, EVFILT_READ, EV_ADD, 0, 0, NULL);
r = kevent(kq, &kset, 1, NULL, 0, NULL);
if(r == -1)
{
perror("kqueue");
return -1;
}
printf("wait for keyboard...\n");
tout.tv_sec = 1;
tout.tv_nsec = 0;
r = kevent(kq, NULL, 0, &kget, 1, &tout);
if(r == -1)
{
perror("kqueue");
return -1;
}else if(r == 0){
printf("time out.\n");
}
close(kq);
}
なお、標準入力はEnter入力までは「読み込み可」にならないようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のプログラミングですが、
-
小数か整数かを判定する方法
-
scanf が無視されます
-
C言語の整数の判別
-
プログラミングの問題で、キー...
-
Userformの入力順序をタブオー...
-
4桁の数字以外を入力したらエラ...
-
Linuxで入力待ちなしkeyread関...
-
入力する数字のサイズ制限について
-
正負を反転させて出力するプロ...
-
Eclipseでコマンドラインを入力...
-
C言語でタイミングを合わせるゲ...
-
Javaについて質問です。 勉強し...
-
C++:cinが上手く使えない
-
ダメだ・・・分からない。while...
-
fgetsとループ処理
-
最早開始時間と最遅完了時刻を...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
strncpyと_tcsncpy_sのヌルの扱...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
コマンドプロンプトからのEOFの...
-
4桁の数字以外を入力したらエラ...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
"scanf"でエンターで改行させな...
-
cout関数を使っているのですが...
-
プログラミングの問題です 「金...
-
scanf関数について
-
Userformの入力順序をタブオー...
-
C言語でgetchar();が上手く使え...
-
プログラムの実行時に'<'でリダ...
-
C言語初心者です。ファイルの読...
-
scanf が無視されます
-
実行結果の順番がおかしいんで...
-
C言語scanf_sで何故か2回入力に...
おすすめ情報