ruby-inotify 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/classes/Inotify/Event.html +206 -0
- data/doc/classes/Inotify/Event.src/M000005.html +18 -0
- data/doc/classes/Inotify/Event.src/M000006.html +18 -0
- data/doc/classes/Inotify/Event.src/M000007.html +18 -0
- data/doc/classes/Inotify/Event.src/M000008.html +18 -0
- data/doc/classes/Inotify/Event.src/M000009.html +18 -0
- data/doc/classes/Inotify/Event.src/M000010.html +18 -0
- data/doc/classes/Inotify/Event.src/M000011.html +18 -0
- data/doc/classes/Inotify/Event.src/M000012.html +23 -0
- data/doc/classes/Inotify/Event.src/M000013.html +23 -0
- data/doc/classes/Inotify/Event.src/M000014.html +18 -0
- data/doc/classes/Inotify/Event.src/M000015.html +23 -0
- data/doc/classes/Inotify/EventStruct.html +117 -0
- data/doc/classes/Inotify.html +476 -0
- data/doc/classes/Inotify.src/M000001.html +18 -0
- data/doc/classes/Inotify.src/M000002.html +18 -0
- data/doc/classes/Inotify.src/M000003.html +18 -0
- data/doc/classes/Inotify.src/M000004.html +22 -0
- data/doc/classes/Inotify.src/M000005.html +21 -0
- data/doc/classes/Inotify.src/M000006.html +21 -0
- data/doc/classes/Inotify.src/M000007.html +19 -0
- data/doc/classes/Inotify.src/M000008.html +18 -0
- data/doc/classes/Inotify.src/M000009.html +18 -0
- data/doc/classes/Inotify.src/M000010.html +18 -0
- data/doc/classes/Inotify.src/M000011.html +21 -0
- data/doc/classes/Inotify.src/M000012.html +21 -0
- data/doc/classes/Test1.html +212 -0
- data/doc/classes/Test1.src/M000001.html +18 -0
- data/doc/classes/Test1.src/M000002.html +18 -0
- data/doc/classes/Test1.src/M000003.html +18 -0
- data/doc/classes/Test1.src/M000004.html +20 -0
- data/doc/classes/Test1.src/M000005.html +30 -0
- data/doc/classes/Test1.src/M000006.html +18 -0
- data/doc/created.rid +1 -0
- data/doc/files/examples/watcher_rb.html +109 -0
- data/doc/files/lib/inotify/inotify_native_rb.html +109 -0
- data/doc/files/lib/inotify/version_rb.html +108 -0
- data/doc/files/lib/inotify_rb.html +108 -0
- data/doc/files/tests/test_1_rb.html +109 -0
- data/doc/fr_class_index.html +28 -0
- data/doc/fr_file_index.html +27 -0
- data/doc/fr_method_index.html +34 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/inotify/inotify_native.rb +103 -23
- data/ruby-inotify.gemspec +1 -1
- metadata +47 -4
- data/lib/inotify/version.rb +0 -3
@@ -1,38 +1,78 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'ffi'
|
3
3
|
|
4
|
+
# The Inotify class is a simple wrapper around the inotify functionality provided by the OS
|
4
5
|
class Inotify
|
5
6
|
|
7
|
+
VERSION = "1.0.1" # :nodoc:
|
8
|
+
|
6
9
|
extend FFI::Library
|
7
10
|
ffi_lib FFI::Platform::LIBC
|
8
11
|
|
9
|
-
|
12
|
+
# The maximum supported size of the name argument in the inotify event structure
|
13
|
+
MAX_NAME_SIZE = 4096 # :nodoc:
|
10
14
|
|
15
|
+
# File was accessed (read) (*)
|
11
16
|
ACCESS = 0x00000001
|
17
|
+
# File was modified (*)
|
12
18
|
MODIFY = 0x00000002
|
13
|
-
|
14
|
-
|
19
|
+
# Metadata changed, e.g., permissions, timestamps,
|
20
|
+
# extended attributes, link count (since Linux 2.6.25),
|
21
|
+
# UID, GID, etc. (*)
|
22
|
+
ATTRIB = 0x00000004
|
23
|
+
# File opened for writing was closed (*)
|
24
|
+
CLOSE_WRITE = 0x00000008
|
25
|
+
# File not opened for writing was closed (*)
|
15
26
|
CLOSE_NOWRITE = 0x00000010
|
27
|
+
# File was opened (*)
|
16
28
|
OPEN = 0x00000020
|
29
|
+
# File moved out of watched directory (*)
|
17
30
|
MOVED_FROM = 0x00000040
|
31
|
+
# File moved into watched directory (*)
|
18
32
|
MOVED_TO = 0x00000080
|
33
|
+
# File/directory created in watched directory (*)
|
19
34
|
CREATE = 0x00000100
|
35
|
+
# File/directory deleted from watched directory (*)
|
20
36
|
DELETE = 0x00000200
|
37
|
+
# Watched file/directory was itself deleted
|
21
38
|
DELETE_SELF = 0x00000400
|
39
|
+
# Watched file/directory was itself moved
|
22
40
|
MOVE_SELF = 0x00000800
|
23
|
-
#
|
41
|
+
# File system containing watched object was unmounted
|
24
42
|
UNMOUNT = 0x00002000
|
43
|
+
# Event queue overflowed (wd is -1 for this event)
|
25
44
|
Q_OVERFLOW = 0x00004000
|
45
|
+
# Watch was removed explicitly (inotify_rm_watch(2)) or
|
46
|
+
# automatically (file was deleted, or file system was
|
47
|
+
# unmounted)
|
26
48
|
IGNORED = 0x00008000
|
49
|
+
# (since Linux 2.6.15) Only watch pathname if it is a directory
|
27
50
|
ONLYDIR = 0x01000000
|
51
|
+
# (since Linux 2.6.15) Don't dereference pathname if it is a symbolic link
|
28
52
|
DONT_FOLLOW = 0x02000000
|
29
|
-
|
30
|
-
#
|
53
|
+
# (since Linux 2.6.36)
|
54
|
+
# By default, when watching events on the children of a
|
55
|
+
# directory, events are generated for children even after
|
56
|
+
# they have been unlinked from the directory. This can
|
57
|
+
# result in large numbers of uninteresting events for some
|
58
|
+
# applications (e.g., if watching /tmp, in which many
|
59
|
+
# applications create temporary files whose names are
|
60
|
+
# immediately unlinked). Specifying IN_EXCL_UNLINK
|
61
|
+
# changes the default behavior, so that events are not
|
62
|
+
# generated for children after they have been unlinked
|
63
|
+
# from the watched directory.
|
64
|
+
EXCL_UNLINK = 0x04000000
|
65
|
+
# Add (OR) events to watch mask for this pathname if it
|
66
|
+
# already exists (instead of replacing mask)
|
67
|
+
MASK_ADD = 0x20000000
|
68
|
+
# Subject of this event is a directory
|
31
69
|
ISDIR = 0x40000000
|
70
|
+
# Monitor pathname for one event, then remove from watch list
|
32
71
|
ONESHOT = 0x80000000
|
33
|
-
#
|
34
|
-
CLOSE = (CLOSE_WRITE | CLOSE_NOWRITE)
|
35
|
-
|
72
|
+
# Both of the close events
|
73
|
+
CLOSE = (CLOSE_WRITE | CLOSE_NOWRITE)
|
74
|
+
# Both of the move events
|
75
|
+
MOVE = (MOVED_FROM | MOVED_TO)
|
36
76
|
#All of the events
|
37
77
|
ALL_EVENTS = (ACCESS | MODIFY | ATTRIB | CLOSE_WRITE | \
|
38
78
|
CLOSE_NOWRITE | OPEN | MOVED_FROM | \
|
@@ -43,33 +83,54 @@ require 'ffi'
|
|
43
83
|
attach_function :inotify_rm_watch, [:int, :uint32], :int
|
44
84
|
attach_function :read, [:int, :pointer, :size_t], :ssize_t
|
45
85
|
attach_function :inotify_close, :close, [:int], :int
|
46
|
-
|
86
|
+
|
87
|
+
# When creating a new instance of this class, an inotify instance is created in the OS.
|
88
|
+
def initialize # :nodoc:
|
47
89
|
@fd = self.inotify_init
|
48
90
|
@io = FFI::IO.for_fd(@fd)
|
49
91
|
end
|
50
|
-
|
51
|
-
|
92
|
+
|
93
|
+
# add_watch() adds a new watch, or modifies an existing watch, for the
|
94
|
+
# file whose location is specified in pathname; the caller must have read
|
95
|
+
# permission for this file. The events to be
|
96
|
+
# monitored for pathname are specified in the mask bit-mask argument.
|
97
|
+
# On success, inotify_add_watch() returns a nonnegative watch descriptor (wd), or
|
98
|
+
# -1 if an error occurred.
|
99
|
+
def add_watch(pathname, mask)
|
100
|
+
self.inotify_add_watch(@fd, pathname, mask)
|
52
101
|
end
|
53
|
-
|
54
|
-
|
102
|
+
|
103
|
+
# rm_watch() removes the watch associated with the watch descriptor wd.
|
104
|
+
# On success, returns zero, or -1 if an error occurred.
|
105
|
+
def rm_watch(wd)
|
106
|
+
self.inotify_rm_watch(@fd, wd)
|
55
107
|
end
|
108
|
+
|
109
|
+
# close() stops the processing of events and closes the
|
110
|
+
# inotify instance in the OS
|
56
111
|
def close
|
57
112
|
self.inotify_close(@fd)
|
58
113
|
end
|
114
|
+
|
115
|
+
# each_event() provides an easy way to loop over all events as they occur
|
59
116
|
def each_event
|
60
117
|
loop do
|
61
118
|
ready = IO.select([@io], nil, nil, nil)
|
62
|
-
|
119
|
+
event = self.read_event
|
120
|
+
yield event
|
63
121
|
end
|
64
122
|
end
|
65
|
-
|
123
|
+
|
124
|
+
# read_event() attempts to read the next inotify event from the OS
|
125
|
+
def read_event # :nodoc:
|
66
126
|
buf = FFI::Buffer.alloc_out(EventStruct.size + MAX_NAME_SIZE, 1, false)
|
67
127
|
ev = EventStruct.new(buf)
|
68
128
|
n = self.read(@fd, buf, buf.total)
|
69
129
|
Event.new(ev, buf)
|
70
130
|
end
|
71
131
|
|
72
|
-
class
|
132
|
+
# Internal class needed for FFI support
|
133
|
+
class EventStruct < FFI::Struct # :nodoc:
|
73
134
|
layout(
|
74
135
|
:wd, :int,
|
75
136
|
:mask, :uint32,
|
@@ -77,20 +138,39 @@ require 'ffi'
|
|
77
138
|
:len, :uint32)
|
78
139
|
end
|
79
140
|
|
141
|
+
# The Inotify::Event class is used by Inotify when calling Inotify each_event method
|
80
142
|
class Event
|
81
|
-
|
143
|
+
|
144
|
+
def initialize(struct, buf) # :nodoc:
|
82
145
|
@struct, @buf = struct, buf
|
83
146
|
end
|
84
147
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
148
|
+
# Returns the watch descriptor (wd) associated with the event
|
149
|
+
def wd
|
150
|
+
@struct[:wd]
|
151
|
+
end
|
152
|
+
|
153
|
+
# Returns the mask describing the event
|
154
|
+
def mask
|
155
|
+
@struct[:mask]
|
156
|
+
end
|
157
|
+
|
158
|
+
# Returns the cookie associated with the event. If multiple events are triggered from the
|
159
|
+
# same action (such as renaming a file or directory), this value will be the same.
|
160
|
+
def cookie
|
161
|
+
@struct[:cookie]
|
162
|
+
end
|
163
|
+
|
164
|
+
def len # :nodoc:
|
165
|
+
@struct[:len]
|
166
|
+
end
|
167
|
+
|
168
|
+
# Returns the file name associated with the event, if applicable
|
89
169
|
def name
|
90
170
|
@struct[:len] > 0 ? @buf.get_string(16, @struct[:len]) : ''
|
91
171
|
end
|
92
172
|
|
93
|
-
def inspect
|
173
|
+
def inspect # :nodoc:
|
94
174
|
"<%s name=%s mask=%s wd=%s>" % [
|
95
175
|
self.class,
|
96
176
|
self.name,
|
data/ruby-inotify.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-inotify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Aria Stewart
|
@@ -48,10 +48,53 @@ files:
|
|
48
48
|
- Gemfile
|
49
49
|
- README.md
|
50
50
|
- Rakefile
|
51
|
+
- doc/classes/Inotify.html
|
52
|
+
- doc/classes/Inotify.src/M000001.html
|
53
|
+
- doc/classes/Inotify.src/M000002.html
|
54
|
+
- doc/classes/Inotify.src/M000003.html
|
55
|
+
- doc/classes/Inotify.src/M000004.html
|
56
|
+
- doc/classes/Inotify.src/M000005.html
|
57
|
+
- doc/classes/Inotify.src/M000006.html
|
58
|
+
- doc/classes/Inotify.src/M000007.html
|
59
|
+
- doc/classes/Inotify.src/M000008.html
|
60
|
+
- doc/classes/Inotify.src/M000009.html
|
61
|
+
- doc/classes/Inotify.src/M000010.html
|
62
|
+
- doc/classes/Inotify.src/M000011.html
|
63
|
+
- doc/classes/Inotify.src/M000012.html
|
64
|
+
- doc/classes/Inotify/Event.html
|
65
|
+
- doc/classes/Inotify/Event.src/M000005.html
|
66
|
+
- doc/classes/Inotify/Event.src/M000006.html
|
67
|
+
- doc/classes/Inotify/Event.src/M000007.html
|
68
|
+
- doc/classes/Inotify/Event.src/M000008.html
|
69
|
+
- doc/classes/Inotify/Event.src/M000009.html
|
70
|
+
- doc/classes/Inotify/Event.src/M000010.html
|
71
|
+
- doc/classes/Inotify/Event.src/M000011.html
|
72
|
+
- doc/classes/Inotify/Event.src/M000012.html
|
73
|
+
- doc/classes/Inotify/Event.src/M000013.html
|
74
|
+
- doc/classes/Inotify/Event.src/M000014.html
|
75
|
+
- doc/classes/Inotify/Event.src/M000015.html
|
76
|
+
- doc/classes/Inotify/EventStruct.html
|
77
|
+
- doc/classes/Test1.html
|
78
|
+
- doc/classes/Test1.src/M000001.html
|
79
|
+
- doc/classes/Test1.src/M000002.html
|
80
|
+
- doc/classes/Test1.src/M000003.html
|
81
|
+
- doc/classes/Test1.src/M000004.html
|
82
|
+
- doc/classes/Test1.src/M000005.html
|
83
|
+
- doc/classes/Test1.src/M000006.html
|
84
|
+
- doc/created.rid
|
85
|
+
- doc/files/examples/watcher_rb.html
|
86
|
+
- doc/files/lib/inotify/inotify_native_rb.html
|
87
|
+
- doc/files/lib/inotify/version_rb.html
|
88
|
+
- doc/files/lib/inotify_rb.html
|
89
|
+
- doc/files/tests/test_1_rb.html
|
90
|
+
- doc/fr_class_index.html
|
91
|
+
- doc/fr_file_index.html
|
92
|
+
- doc/fr_method_index.html
|
93
|
+
- doc/index.html
|
94
|
+
- doc/rdoc-style.css
|
51
95
|
- examples/watcher.rb
|
52
96
|
- lib/inotify.rb
|
53
97
|
- lib/inotify/inotify_native.rb
|
54
|
-
- lib/inotify/version.rb
|
55
98
|
- ruby-inotify.gemspec
|
56
99
|
- tests/test_1.rb
|
57
100
|
homepage: http://dinhe.net/~aredridel/projects/ruby/ruby-inotify
|
data/lib/inotify/version.rb
DELETED