2013-07-14 15 views
1

此代碼返回終端窗口的大小。這個Python代碼中發生了什麼以獲得終端窗口大小?

def gettermsize(): 
    s = struct.pack("HHHH", 0, 0, 0, 0) 
    a = struct.unpack('hhhh', fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ , s)) 
    return (a[0], a[1]) 

它究竟在做什麼?

+0

另請參閱:http://stackoverflow.com/questions/16237137/what-is-termios-tiocgwinsz – phant0m

+0

另請參閱[在C中獲取終端寬度?](http://stackoverflow.com/a/1022961)for一個相當於你的代碼的C語言。 – pascalhein

回答

2

通常,ioctrl調用將允許操作員查詢& /或設置物理或邏輯設備的各種特性 - 哪些值可用以及如何獲取這些特性是特定於設備和設備類型的。在這種情況下,正在查詢終端設備(termios),窗口大小(TIOCGWINSZ)的標準輸出控制檯(其手柄由sys.stdout.fileno()提供),並且它需要一個包含4個16位無符號值的結構才能工作在(s)中,它返回爲4個有符號值,其中前兩個大概用作高度和寬度。您需要打包/解包值的原因是,這實際上是直接調用C代碼。