Python | os.pwritev 函數

怎樣寫入緩衝區字節串數組

最近更新時間 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

rss_feed