Class: Qfs::File
- Inherits:
-
Object
- Object
- Qfs::File
- Defined in:
- lib/qfs.rb,
ext/qfs/file.c
Overview
A File on QFS.
Instance Method Summary collapse
- #chmod(mode) ⇒ Object
- #close ⇒ Object
-
#read(len = nil) ⇒ String
Read from a file.
-
#read_len(len) ⇒ Object
This is a handle to a fd that can perform IO.
-
#seek(offset, whence = IO::SEEK_CUR) ⇒ Int
Seek to the specified position in the file.
-
#stat ⇒ Object
Returns a Qfs::Attr object for the file.
- #tell ⇒ Object
- #write(str) ⇒ Object
Instance Method Details
#chmod(mode) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 |
# File 'ext/qfs/file.c', line 76
static VALUE qfs_file_chmod(VALUE self, VALUE mode) {
struct qfs_file *file;
struct qfs_client *client;
Check_Type(mode, T_FIXNUM);
mode_t imode = (mode_t)FIX2INT(mode);
Data_Get_Struct(self, struct qfs_file, file);
Data_Get_Struct(file->client, struct qfs_client, client);
int res = qfs_chmod_fd(client->qfs, file->fd, imode);
QFS_CHECK_ERR(res);
return RES2BOOL(res);
}
|
#close ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'ext/qfs/file.c', line 62
static VALUE qfs_file_close(VALUE self) {
TRACE;
struct qfs_file *file;
struct qfs_client *client;
Data_Get_Struct(self, struct qfs_file, file);
Data_Get_Struct(file->client, struct qfs_client, client);
int err = qfs_close(client->qfs, file->fd);
QFS_CHECK_ERR(err);
file->fd = QFS_NIL_FD;
file->client = Qnil;
TRACE_R;
return Qnil;
}
|
#read(len = nil) ⇒ String
Read from a file. Don’t specify a length to read the entire file.
read the entire file.
322 323 324 325 |
# File 'lib/qfs.rb', line 322 def read(len = nil) len ||= stat.size read_len(len) end |
#read_len(len) ⇒ Object
This is a handle to a fd that can perform IO.
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'ext/qfs/file.c', line 11
static VALUE qfs_file_read(VALUE self, VALUE len) {
struct qfs_file *file;
struct qfs_client *client;
Check_Type(len, T_FIXNUM);
Data_Get_Struct(self, struct qfs_file, file);
Data_Get_Struct(file->client, struct qfs_client, client);
size_t n = (size_t)NUM2INT(len);
VALUE s = rb_str_buf_new((long)n);
ssize_t n_read = qfs_read(client->qfs, file->fd, RSTRING_PTR(s), n);
QFS_CHECK_ERR(n_read);
rb_str_set_len(s, n_read);
return s;
}
|
#seek(offset, whence = IO::SEEK_CUR) ⇒ Int
Seek to the specified position in the file. The default ‘whence’ value is SEEK_CUR, so the offset will be applied to the current file position.
IO::SEEK_END, IO::SEEK_SET. Defaults to IO::SEEK_CUR
335 336 337 |
# File 'lib/qfs.rb', line 335 def seek(offset, whence=IO::SEEK_CUR) seek_internal(offset, whence) end |
#stat ⇒ Object
Returns a Qfs::Attr object for the file.
36 37 38 39 40 41 42 43 44 45 |
# File 'ext/qfs/file.c', line 36
static VALUE qfs_file_stat(VALUE self) {
struct qfs_file *file;
struct qfs_client *client;
Data_Get_Struct(self, struct qfs_file, file);
Data_Get_Struct(file->client, struct qfs_client, client);
struct qfs_attr *attr = ALLOC(struct qfs_attr);
int res = qfs_stat_fd(client->qfs, file->fd, attr);
QFS_CHECK_ERR(res);
return Data_Wrap_Struct(cQfsAttr, NULL, free, attr);
}
|
#tell ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'ext/qfs/file.c', line 25
static VALUE qfs_file_tell(VALUE self) {
struct qfs_file *file;
struct qfs_client *client;
Data_Get_Struct(self, struct qfs_file, file);
Data_Get_Struct(file->client, struct qfs_client, client);
off_t offset = qfs_tell(client->qfs, file->fd);
QFS_CHECK_ERR(offset);
return INT2FIX(offset);
}
|
#write(str) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'ext/qfs/file.c', line 47
static VALUE qfs_file_write(VALUE self, VALUE str) {
struct qfs_file *file;
struct qfs_client *client;
Check_Type(str, T_STRING);
Data_Get_Struct(self, struct qfs_file, file);
Data_Get_Struct(file->client, struct qfs_client, client);
ssize_t n = qfs_write(client->qfs, file->fd, RSTRING_PTR(str),
(size_t)RSTRING_LEN(str));
QFS_CHECK_ERR(n);
if (n < RSTRING_LEN(str)) {
WARN("partial write");
}
return INT2FIX(n);
}
|