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 }