From: Andrew Gerrand Date: Wed, 12 Jan 2011 00:08:39 +0000 (+1100) Subject: os: add Sync to *File, wraps syscall.Fsync X-Git-Tag: weekly.2011-01-12~17 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=217693e93c23fed2f3224dfaf1eb730d8e5256bb;p=gostls13.git os: add Sync to *File, wraps syscall.Fsync R=rsc, brainman, r, r2 CC=golang-dev https://golang.org/cl/3887042 --- diff --git a/src/pkg/os/file.go b/src/pkg/os/file.go index 909e28e68f..3f73f1dffe 100644 --- a/src/pkg/os/file.go +++ b/src/pkg/os/file.go @@ -408,6 +408,19 @@ func (f *File) Truncate(size int64) Error { return nil } +// Sync commits the current contents of the file to stable storage. +// Typically, this means flushing the file system's in-memory copy +// of recently written data to disk. +func (file *File) Sync() (err Error) { + if file == nil { + return EINVAL + } + if e := syscall.Fsync(file.fd); e != 0 { + return NewSyscallError("fsync", e) + } + return nil +} + // Chtimes changes the access and modification times of the named // file, similar to the Unix utime() or utimes() functions. // diff --git a/src/pkg/syscall/syscall_windows.go b/src/pkg/syscall/syscall_windows.go index b425337bf5..9501779e18 100644 --- a/src/pkg/syscall/syscall_windows.go +++ b/src/pkg/syscall/syscall_windows.go @@ -684,6 +684,9 @@ func Chown(path string, uid int, gid int) (errno int) { return EWINDOWS } func Lchown(path string, uid int, gid int) (errno int) { return EWINDOWS } func Fchown(fd int, uid int, gid int) (errno int) { return EWINDOWS } +// TODO(brainman): use FlushFileBuffers Windows api to implement Fsync. +func Fsync(fd int) (errno int) { return EWINDOWS } + func Getuid() (uid int) { return -1 } func Geteuid() (euid int) { return -1 } func Getgid() (gid int) { return -1 }