Python | os.preadv 函数

Lasted 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。