This comment is reply for 3698 mtsuyugu: tail -f の動作を調べて、参考にし...(ファイル更新の監視). Go to thread root.
mtsuyugu #4073(2007/11/15 14:25 GMT) [ diff ] Rating1/1=1.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
--- main.c.org Thu Nov 15 23:18:57 2007 +++ main.c Thu Nov 15 23:23:17 2007 @@ -4,7 +4,13 @@ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> +#include <signal.h> +#include <unistd.h> +int received_sigint; +void sigint_handler( int sig ){ + received_sigint = 1; +} int main ( int argc, char *argv[] ){ @@ -33,6 +39,11 @@ return EXIT_FAILURE; } + if( signal(SIGINT, sigint_handler) == SIG_ERR ){ + fprintf(stderr,"couldn't register SIGINT handler\n"); + return EXIT_FAILURE; + } + kq = kqueue(); EV_SET( &kev, fd, EVFILT_READ, EV_ADD | EV_ENABLE | EV_CLEAR , 0, 0, 0 ); @@ -40,9 +51,16 @@ fprintf(stderr,"kevent failed\n" ); return EXIT_FAILURE; } + kevent(kq, NULL, 0, &kev, 1, NULL); while(1){ - kevent(kq, NULL, 0, &kev, 1, NULL); + if( kevent(kq, NULL, 0, &kev, 1, NULL) == -1 ){ + if( !received_sigint ){ + perror("error"); + } + break; + } printf("modified!\n"); } + close(fd); return EXIT_SUCCESS; }
Rating1/1=1.00-0+
[ reply ]
mtsuyugu
#4073()
[
diff
]
Rating1/1=1.00
- 初回のイベント通知は捨てる。
- close 処理を追加。
を追加してみました。
Rating1/1=1.00-0+