1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為您正在標(biāo)準(zhǔn)庫fcntl.ioctl
中尋找該函數(shù),并且它內(nèi)部使用系統(tǒng)調(diào)用。fcntl
ioctl
從文檔來看,
fcntl.ioctl(fd, request, arg=0, mutate_flag=True)該函數(shù)與 fcntl() 函數(shù)相同,只是參數(shù)處理更加復(fù)雜。
請(qǐng)求參數(shù)僅限于適合 32 位的值。
termios
可以在module中找到用作請(qǐng)求參數(shù)的其他感興趣的常量,其名稱與相關(guān) C 頭文件中使用的名稱相同。參數(shù) arg 可以是整數(shù)、支持只讀緩沖區(qū)接口的對(duì)象(如 bytes)或支持讀寫緩沖區(qū)接口的對(duì)象(如 bytearray)之一。
除了最后一種情況外,在所有情況下,行為都與 fcntl() 函數(shù)相同。
如果傳遞可變緩沖區(qū),則行為由 mutate_flag 參數(shù)的值確定。
如果為 false,則忽略緩沖區(qū)的可變性,并且行為與只讀緩沖區(qū)相同,只是避免了上面提到的 1024 字節(jié)限制 - 只要您傳遞的緩沖區(qū)至少與操作系統(tǒng)想要的一樣長放在那里,一切都應(yīng)該正常。
如果 mutate_flag 為 true(默認(rèn)值),則緩沖區(qū)(實(shí)際上)被傳遞給底層 ioctl() 系統(tǒng)調(diào)用,后者的返回代碼被傳回調(diào)用 Python,并且緩沖區(qū)的新內(nèi)容反映了 ioctl 的操作()。這是一個(gè)輕微的簡化,因?yàn)槿绻峁┑木彌_區(qū)小于 1024 字節(jié)長,則首先將其復(fù)制到 1024 字節(jié)長的靜態(tài)緩沖區(qū)中,然后將其傳遞給 ioctl() 并復(fù)制回提供的緩沖區(qū)中。
如果 ioctl() 失敗,則會(huì)引發(fā) OSError 異常。
一個(gè)例子:
>>> import array, fcntl, struct, termios, os
>>> os.getpgrp()
13341
>>> struct.unpack('h', fcntl.ioctl(0, termios.TIOCGPGRP, "? "))[0]?
13341
>>> buf = array.array('h', [0])
>>> fcntl.ioctl(0, termios.TIOCGPGRP, buf, 1)?
0
>>> buf?
array('h', [13341])
添加回答
舉報(bào)