Python | os.pipe2 函數
怎樣創建非阻塞模式管道
最近更新時間 2020-12-11 10:13:11
os.pipe2 函數創建帶有 flags 標誌位的管道。可通過對以下一個或多個值進行“或”運算來構造這些 flags:O_NONBLOCK、O_CLOEXEC。返回一對分別用於讀取和寫入的文件描述符 (r, w)。
管道是一種將信息從一個進程傳遞到另一個進程的方法。它僅提供單向通信,並且傳遞的信息由系統保留,直到被接收過程讀取為止。
這個概念是由道格拉斯·麥克羅伊為 Unix 命令行發明的,因與物理上的管道相似而得名。
功能跟 os.pipe() 函數類似。由於 O_NONBLOCK、O_CLOEXEC 參數只能在 Unix 下可用,該函數也只能在 Unix 系統中使用。
函數定義
os.pipe2(flags)
# 函數定義
if sys.platform != 'win32':
# Unix only
...
def pipe2(flags: int) -> Tuple[int, int]: ... # some flavors of Unix
...
兼容性:Unix 系統。
參數
- checkflags - 標誌位,os.O_NONBLOCK、os.O_CLOEXEC 值可以單獨使用,也可進行 | 異或操作。
返回值
- checkTuple[int, int] - 讀和寫文件描述符。
示例1: - 使用 os.pipe2() 函數創建非阻塞模式管道進行讀寫。
# coding=utf-8
# Python3 代碼
# 講解怎樣使用 os.pipe2() 函數創建非阻塞模式管道
# 引入 os 庫
import os
# 使用 os.O_NONBLOCK 參數
# 創建一個非阻塞模式管道
flags = os.O_NONBLOCK
r, w = os.pipe2(flags)
# 創建一個子進程
# 父進程用於讀,子進程用於寫
pid = os.fork()
if pid > 0:
# 父進程
# 關閉讀文件
os.close(r)
# 寫入數據
print("Parent process is writing")
text = b"Hello child process"
os.write(w, text)
print("Written text:", text.decode())
else:
# 子進程
# 關閉讀文件
os.close(w)
# 讀取父進程數據
print("\nChild Process is reading")
r = os.fdopen(r)
print("Read text:", r.read())
Parent process is writing Written text: Hello child process Child Process is reading Read text: Hello child process