网站首页页面,北京房产交易网官网,深圳 做网站,河南城乡和住房建设厅网站这里使用零拷贝技术复制文件#xff0c;从内核态操作源文件和目标文件。避免了在用户态开辟缓冲区#xff0c;然后从内核态复制文件到用户态的问题。 由内核态完成文件复制操作。 调用的是syscall.Sendfile系统调用函数。
//go:build linuxpackage zero_copyimport (f…这里使用零拷贝技术复制文件从内核态操作源文件和目标文件。避免了在用户态开辟缓冲区然后从内核态复制文件到用户态的问题。 由内核态完成文件复制操作。 调用的是syscall.Sendfile系统调用函数。
//go:build linuxpackage zero_copyimport (fmtossyscalltesting
)func TestZeroCopy(t *testing.T) {// 打开源文件和目标文件srcFile, err : os.Open(./source.txt)if err ! nil {fmt.Println(无法打开源文件, err)return}defer srcFile.Close()dstFile, err : os.Create(./destination.txt)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)
}