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

Synchronizing a file system (syncfs) in Go

Go中有导出syncfs函数的包吗?我想同步一个特定的文件系统。

我找到了 syscall 包,但它只导出 FSyncFdatasyncSync

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

但是,由于 syscall package does not have the syncfs syscall constant, you can use 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
}

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

import "syscall"

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