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
rss_feed