github.com/josephvusich/fdf@v0.0.0-20230522095411-9326dd32e33f/clonefile_linux.go (about)

     1  package main
     2  
     3  // #include <linux/fs.h>
     4  import "C"
     5  
     6  import (
     7  	"os"
     8  
     9  	"golang.org/x/sys/unix"
    10  )
    11  
    12  func cloneFile(src, dst string) error {
    13  	sf, err := os.Open(src)
    14  	if err != nil {
    15  		return err
    16  	}
    17  	defer sf.Close()
    18  	df, err := os.Create(dst)
    19  	if err != nil {
    20  		return err
    21  	}
    22  	defer df.Close()
    23  
    24  	_, _, err = unix.Syscall(unix.SYS_IOCTL, df.Fd(), C.FICLONE, sf.Fd())
    25  	return err
    26  }