Python | os.pwritev 函数

Lasted 2020-12-12 12:54:49

os.pwritev 函数将缓冲区 buffers 的内容写入文件描述符 fd 的偏移位置 offset 处,保持文件偏移量不变。缓冲区 buffers 必须是由 字节类对象 组成的序列。缓冲区以数组顺序处理。先写入第一个缓冲区的全部内容,再写入第二个缓冲区,照此继续。返回实际写入的字节总数。

操作系统可能对允许使用的缓冲区数量有限制(使用 sysconf() 获取 'SC_IOV_MAX' 值)。

函数定义

os.pwritev(fd, buffers, offset, flags=0)
# 函数定义

if sys.platform != 'win32':
    # Unix only
    ...
    def pwritev(__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.7 或更高版本。

版本:3.7 新版功能。

参数

  • checkfd - 文件描述符。
  • checkbuffers - 缓冲区数组。
  • checkoffset - 文件偏移量。
  • checkflags - 操作标志位,可进行或运算。
    • os.RWF_DSYNC=2 提供立即写入功能,等效于 O_DSYNC open(2) 标志。该标志仅作用于系统调用写入的数据。
    • os.RWF_SYNC=4 提供立即写入功能,等效于 O_SYNC open(2) 标志。该标志仅作用于系统调用写入的数据。

返回值

  • checkint - 返回实际写入的字节总数。

示例1: - 使用 os.pwritev() 函数写入缓冲区数组。

# coding=utf-8

# Python3 代码
# 讲解怎样使用 os.pwritev() 函数写入缓冲区数组

# 引入 os 库
import os

# 文件路径
path = "foo.txt"

# 使用 os.open 函数打开文件
fd = os.open(path, os.O_RDWR)

# 使用 os.pwritev 函数
# 写入字节数组
buffer1 = bytearray(b"Python") 
buffer2 = bytearray(b"PHP") 
len = os.pwritev(fd, [buffer1, buffer2], 3)

# 缓冲的字符长度
print('Length::', len)

# 读取文件内容
with open(path) as f:
    print(f.read())

# 关闭文件
os.close(fd)
Length:: 9
fooPythonPHP

fd 文件描述符需要可写权限,否则抛出 OSError 异常 OSError: [Errno 9] Bad file descriptor