mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 13:04:13 +02:00
* io.c (rb_io_fdatasync): new method IO#fdatasync.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23811 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5d30ddec17
commit
a7dedc272e
4 changed files with 37 additions and 4 deletions
29
io.c
29
io.c
|
@ -1319,6 +1319,34 @@ rb_io_fsync(VALUE io)
|
|||
#define rb_io_fsync rb_f_notimplement
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FDATASYNC
|
||||
/*
|
||||
* call-seq:
|
||||
* ios.fdatasync => 0 or nil
|
||||
*
|
||||
* Immediately writes all buffered data in <em>ios</em> to disk.
|
||||
* Returns <code>nil</code> if the underlying operating system does not
|
||||
* support <em>fdatasync(2)</em>.
|
||||
*/
|
||||
|
||||
static VALUE
|
||||
rb_io_fdatasync(VALUE io)
|
||||
{
|
||||
rb_io_t *fptr;
|
||||
|
||||
io = GetWriteIO(io);
|
||||
GetOpenFile(io, fptr);
|
||||
|
||||
if (io_fflush(fptr) < 0)
|
||||
rb_sys_fail(0);
|
||||
if (fdatasync(fptr->fd) < 0)
|
||||
rb_sys_fail_path(fptr->pathv);
|
||||
return INT2FIX(0);
|
||||
}
|
||||
#else
|
||||
#define rb_io_fdatasync rb_f_notimplement
|
||||
#endif
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* ios.fileno => fixnum
|
||||
|
@ -8781,6 +8809,7 @@ Init_IO(void)
|
|||
rb_define_method(rb_cIO, "to_io", rb_io_to_io, 0);
|
||||
|
||||
rb_define_method(rb_cIO, "fsync", rb_io_fsync, 0);
|
||||
rb_define_method(rb_cIO, "fdatasync", rb_io_fdatasync, 0);
|
||||
rb_define_method(rb_cIO, "sync", rb_io_sync, 0);
|
||||
rb_define_method(rb_cIO, "sync=", rb_io_set_sync, 1);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue