Class: Libuv::File
Constant Summary
collapse
- EOF =
"0\r\n\r\n"
- CRLF =
"\r\n"
Constants included
from Assertions
Assertions::MSG_NO_PROC
Instance Attribute Summary collapse
Attributes inherited from Q::Promise
#trace
Instance Method Summary
collapse
-
#chmod(mode, wait: true) ⇒ Object
-
#chown(uid:, gid:, wait: true) ⇒ Object
-
#close ⇒ Object
-
#datasync(wait: false) ⇒ Object
-
#initialize(thread, path, flags = 0, mode: 0) ⇒ File
constructor
-
#read(length, offset = 0, wait: true) ⇒ Object
-
#send_file(stream, using: :raw, chunk_size: 4096, wait: true) ⇒ Object
-
#sync(wait: false) ⇒ Object
-
#truncate(offset, wait: true) ⇒ Object
-
#utime(atime:, mtime:, wait: true) ⇒ Object
-
#write(data, offset = 0, wait: true) ⇒ Object
Methods included from Assertions
#assert_block, #assert_boolean, #assert_type
Methods included from Resource
#check_result, #check_result!, #resolve, #to_ptr
Methods included from FsChecks
included, #stat
#resolved?, #then
Methods inherited from Q::Promise
#catch, #finally, #progress, #ruby_catch, #value
Constructor Details
#initialize(thread, path, flags = 0, mode: 0) ⇒ File
Returns a new instance of File.
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/libuv/file.rb', line 32
def initialize(thread, path, flags = 0, mode: 0)
super(thread, thread.defer)
@fileno = -1
@closed = true
@path, @flags, @mode = path, flags, mode
@request_refs = {}
request = ::Libuv::Ext.allocate_request_fs
pre_check @defer, request, ::Libuv::Ext.fs_open(@reactor, request, @path, @flags, @mode, callback(:on_open, request.address))
if block_given?
self.progress &Proc.new
else
@coroutine = @reactor.defer
@coroutine.promise.value
end
end
|
Instance Attribute Details
Returns the value of attribute closed.
29
30
31
|
# File 'lib/libuv/file.rb', line 29
def closed
@closed
end
|
Returns the value of attribute fileno.
29
30
31
|
# File 'lib/libuv/file.rb', line 29
def fileno
@fileno
end
|
Instance Method Details
#chmod(mode, wait: true) ⇒ Object
129
130
131
132
133
134
135
136
137
|
# File 'lib/libuv/file.rb', line 129
def chmod(mode, wait: true)
assert_type(Integer, mode, "mode must be an Integer")
deferred = @reactor.defer
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = deferred
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fchmod(@reactor.handle, request, @fileno, mode, callback(:on_chmod, request.address)))
end
|
#chown(uid:, gid:, wait: true) ⇒ Object
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/libuv/file.rb', line 139
def chown(uid:, gid:, wait: true)
assert_type(Integer, uid, "uid must be an Integer")
assert_type(Integer, gid, "gid must be an Integer")
deferred = @reactor.defer
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = deferred
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fchown(@reactor.handle, request, @fileno, uid, gid, callback(:on_chown, request.address)))
end
|
51
52
53
54
55
56
|
# File 'lib/libuv/file.rb', line 51
def close
@closed = true
request = ::Libuv::Ext.allocate_request_fs
pre_check(@defer, request, ::Libuv::Ext.fs_close(@reactor.handle, request, @fileno, callback(:on_close, request.address)))
self
end
|
#datasync(wait: false) ⇒ Object
98
99
100
101
102
103
104
105
|
# File 'lib/libuv/file.rb', line 98
def datasync(wait: false)
deferred = @reactor.defer
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = deferred
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fdatasync(@reactor.handle, request, @fileno, callback(:on_datasync, request.address)))
end
|
#read(length, offset = 0, wait: true) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/libuv/file.rb', line 58
def read(length, offset = 0, wait: true)
assert_type(Integer, length, "length must be an Integer")
assert_type(Integer, offset, "offset must be an Integer")
deferred = @reactor.defer
buffer1 = FFI::MemoryPointer.new(length)
buffer = ::Libuv::Ext.buf_init(buffer1, length)
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = [deferred, buffer1]
promise = pre_check(deferred, request, ::Libuv::Ext.fs_read(@reactor.handle, request, @fileno, buffer, 1, offset, callback(:on_read, request.address)))
wait ? promise.value : promise
end
|
#send_file(stream, using: :raw, chunk_size: 4096, wait: true) ⇒ Object
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
# File 'lib/libuv/file.rb', line 150
def send_file(stream, using: :raw, chunk_size: 4096, wait: true)
@transmit_failure ||= proc { |reason| @sending_file.reject(reason) }
@start_transmit ||= proc { |stats|
@file_stream_total = stats[:st_size]
next_chunk
}
@transmit_data ||= proc { |data| transmit_data(data) }
@sending_file = @reactor.defer
@file_stream = stream
@file_stream_type = using
@file_chunk_size = chunk_size
@file_chunk_count = 0
stat(wait: false).then @start_transmit, @transmit_failure
promise = @sending_file.promise
promise.finally { clean_up_send }
respond wait, promise
end
|
#sync(wait: false) ⇒ Object
89
90
91
92
93
94
95
96
|
# File 'lib/libuv/file.rb', line 89
def sync(wait: false)
deferred = @reactor.defer
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = deferred
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fsync(@reactor.handle, request, @fileno, callback(:on_sync, request.address)))
end
|
#truncate(offset, wait: true) ⇒ Object
107
108
109
110
111
112
113
114
115
|
# File 'lib/libuv/file.rb', line 107
def truncate(offset, wait: true)
assert_type(Integer, offset, "offset must be an Integer")
deferred = @reactor.defer
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = deferred
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_ftruncate(@reactor.handle, request, @fileno, offset, callback(:on_truncate, request.address)))
end
|
#utime(atime:, mtime:, wait: true) ⇒ Object
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/libuv/file.rb', line 117
def utime(atime:, mtime:, wait: true)
assert_type(Integer, atime, "atime must be an Integer")
assert_type(Integer, mtime, "mtime must be an Integer")
deferred = @reactor.defer
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = deferred
promise = pre_check deferred, request, ::Libuv::Ext.fs_futime(@reactor.handle, request, @fileno, atime, mtime, callback(:on_utime, request.address))
wait ? promise.value : promise
end
|
#write(data, offset = 0, wait: true) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/libuv/file.rb', line 73
def write(data, offset = 0, wait: true)
assert_type(String, data, "data must be a String")
assert_type(Integer, offset, "offset must be an Integer")
deferred = @reactor.defer
length = data.respond_to?(:bytesize) ? data.bytesize : data.size
buffer1 = FFI::MemoryPointer.from_string(data)
buffer = ::Libuv::Ext.buf_init(buffer1, length)
request = ::Libuv::Ext.allocate_request_fs
@request_refs[request.address] = [deferred, buffer1]
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_write(@reactor.handle, request, @fileno, buffer, 1, offset, callback(:on_write, request.address)))
end
|