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 }