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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
VB.NETで16進数+16進数や16進...
-
scanf が無視されます
-
C言語・標準入力でquitを入力で...
-
C言語でのカレンダー作成
-
3つほどプログラムをおしえてく...
-
特定の文字が入力されるまで・・・
-
入力フォームのテキストボック...
-
C言語の非標準コンソール関数ge...
-
日付型のデータに変換するには!?
-
getcharをしながらwhile文で出...
-
至急教えてください!プログラ...
-
フローチャートについて
-
"gets"は危険なのでしょうか?
-
入力候補を表示させるには・・・?
-
*をユーザーが入力した数字の数...
-
c言語の数当てゲームプログラム...
-
C言語 ループの問題
-
数字以外が入力されたらエラー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
Linuxで入力待ちなしkeyread関...
-
batプログラム上で文字列を入力...
-
WindowsでEOF
-
Userformの入力順序をタブオー...
-
コマンドプロンプトからのEOFの...
-
EDITコントロールで入力できる...
-
VisualStudio2019のコードアナ...
-
電卓の小数点
-
Eclipseでコマンドラインを入力...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
UWSCで変数をキー入力
-
ワードで文字を入力する時の変...
おすすめ情報