Comment detail

ファイル更新の監視 (Nested Flatten)

This comment is reply for 3698 mtsuyugu: tail -f の動作を調べて、参考にし...(ファイル更新の監視). Go to thread root.

プラス評価ありがとうございます。
- 初回のイベント通知は捨てる。
- close 処理を追加。
を追加してみました。
 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;
 }

Index

Feed

Other

Link

Pathtraq

loading...