Python | os.preadv 函数
怎样读取文件到缓存区
最近更新时间 2020-12-12 12:36:49
os.preadv 函数从文件描述符 fd 所指向文件的偏移位置 offset 开始,将数据读取至可变 字节类对象 缓冲区 buffers 中,保持文件偏移量不变。将数据依次存放到每个缓冲区中,填满一个后继续存放到序列中的下一个缓冲区,来保存其余数据。
带缓冲区文件操作是高级标准文件 I/O 操作,将会在用户空间中自动为正在使用的文件开辟内存缓冲区。分全缓冲区和行缓冲区。操作系统可能对允许使用的缓冲区数量有限制(使用 os.sysconf() 获取 'SC_IOV_MAX' 值)。
函数定义
os.preadv(fd, buffers, offset, flags=0)
# 函数定义
if sys.platform != 'win32':
# Unix only
...
def preadv(__fd: int, __buffer: bytes[], __offset: int, __flags: int = 0) -> int: ...
...
兼容性:Linux 2.6.30 或更高版本,FreeBSD 6.0 或更高版本,OpenBSD 2.7 或更高版本,AIX 7.1 或更高版本。使用标志位需要 Linux 4.6 或更高版本。
版本:3.7 新版功能。
参数
- checkfd - 文件描述符。
- checkbuffers - 缓冲区。
- checkoffset - 文件偏移量。
- checkflags - 标志位,可单独使用或按位或运算
- os.RWF_HIPRI=1 高优先级读/写。
- os.RWF_NOWAIT=8 不要等待无法立即获得的数据。
返回值
- checkint - 缓冲的字符长度。
示例1: - 使用 os.preadv() 函数读取文件到缓冲区。
# coding=utf-8
# Python3 代码
# 讲解怎样使用 os.preadv() 函数读取文件到缓冲区
# 引入 os 库
import os
# 文件路径
path = "foo.txt"
# 使用 os.open 函数打开文件
fd = os.open(path, os.O_RDONLY)
# 初始化缓冲区,长度为 10
size = 10
buffers = bytearray(size)
# 使用 os.preadv 函数
# 从第 2 个字符开始读取
len = os.preadv(fd, [buffers], 2)
print(buffers)
# 缓冲的字符长度
print('Length::', len)
# 关闭文件
os.close(fd)
bytearray(b'oooo\n\x00\x00\x00\x00\x00') Length:: 5
由于文件长度不足 10 个字符,多的区域为 \x00。