Python | os.sendfile 函数
怎样根据文件描述符复制文件内容
最近更新时间 2020-12-16 14:17:37
os.sendfile 函数将文件描述符 in_fd 中的 count 字节复制到文件描述符 out_fd 的偏移位置 offset 处。返回复制的字节数,如果到达 EOF,返回 0。
支持将套接字作为 out_fd 文件描述符。Mac OS X 和 FreeBSD 系统中可以使用 headers 等参数。
函数定义
os.sendfile(out_fd, in_fd, offset, count)
# 函数定义
if sys.platform != 'win32':
# Unix only
...
@overload
def sendfile(__out_fd: int, __in_fd: int, offset: Optional[int], count: int) -> int: ...
@overload
def sendfile(
__out_fd: int,
__in_fd: int,
offset: int,
count: int,
headers: Sequence[bytes] = ...,
trailers: Sequence[bytes] = ...,
flags: int = ...,
) -> int: ... # FreeBSD and Mac OS X only
...
兼容性:Unix 系统。
参数
- checkout_fd - 目标文件描述符。
- checkin_fd - 源文件描述符。
- checkoffset - 文件偏移量。
- checkcount - 复制的字节长度。
返回值
- checkint - 复制的字节长度,在文件尾可能小于 count。
示例1: - 使用 os.sendfile() 函数复制文件数据。
# coding=utf-8
# Python3 代码
# 讲解怎样使用 os.sendfile() 函数复制文件数据
# 引入 os 模块
import os
# 源文件路径
path = "foo.txt"
# 输出文件路径
out_path = "out.txt"
# 使用 os.open 函数打开文件
# 源文件只需要读权限
in_fd = os.open(path, os.O_RDONLY)
# 输出文件需要读写权限
# 最好加上 CREATE 权限,否则文件不存在会报错
out_fd = os.open(out_path, os.O_RDWR|os.O_CREAT)
# 使用 os.sendfile 函数
# 发送 3 字节数据
offset = 0
count = 3
ret_val = os.sendfile(out_fd, in_fd, offset, count)
print("Send Btyes::", ret_val)
# 关闭文件
os.close(in_fd)
os.close(out_fd)
Send Btyes:: 3
注意:文件如果使用 UTF-8 编码,中文为 3个字节,如果复制不是 3的倍数,可能会产生乱码。