在 Go 中同步文件系统 (syncfs)

Pet*_*lák 4 filesystems synchronization go

syncfsGo中有导出该函数的包吗?我想同步特定的文件系统。

我找到了syscall包,但它只导出FSync,FdatasyncSync.

小智 5

syncfs只是一个系统调用,在Go中很容易触发。

但是,由于该syscall没有syncfs系统调用常量,因此您可以使用golang.org/x/sys/unix已定义的系统调用常量(并不是真正必要,因为系统调用常量只是一个数字,但使用该包不会有什么坏处)。

import "golang.org/x/sys/unix"

func syncfs(fd int) error {
    _, _, err := unix.Syscall(unix.SYS_SYNCFS, uintptr(fd), 0, 0)
    if err != 0 {
        return err
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这里是仅使用该包的解决方案syscall

import "syscall"

func syncfs(fd int) error {
    _, _, err := syscall.Syscall(306, uintptr(fd), 0, 0)
    if err != 0 {
        return err
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)