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。

rss_feed