Go zero copy,复制文件
//go:build linux
package zero_copy
import (
"fmt"
"os"
"syscall"
"testing"
)
func TestZeroCopy(t *testing.T) {
// 打开源文件和目标文件
srcFile, err := os.Open("./")
if err != nil {
fmt.Println("无法打开源文件:", err)
return
}
defer srcFile.Close()
dstFile, err := os.Create("./")
if err != nil {
fmt.Println("无法创建目标文件:", err)
return
}
defer dstFile.Close()
srcFileInfo, _ := srcFile.Stat()
fileSize := int(srcFileInfo.Size())
offset := int64(0)
n, err := syscall.Sendfile(int(dstFile.Fd()), int(srcFile.Fd()), &offset, fileSize)
if err != nil {
fmt.Println("文件拷贝失败:", err)
return
}
fmt.Printf("成功拷贝 %d 字节\n", n)
}