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。