Ptys(伪终端)内部缓冲区大小


2

我试图模拟主要和从属Ptys,但不知道什么是缓冲区限制,并且它在不同版本的Linux上有所不同?是否有任何方法(系统调用)来获取缓冲区,主站和从站的最大大小来读写?


尝试找出了什么?
sass

2
@yass我尝试了一些ioctl调用,如FIONREAD,TIOCINQ和TIOCOUTQ,但它只返回输入/输出缓冲区中有多少字节,而不是缓冲区限制或最大大小。:(
Baba Rocks 2017年

Answers:


4

无论如何,我自己找到了答案。我阅读并验证了(使用我的程序)“Kerrisk,Michael。Linux编程接口”一书中的以下行。在Linux上,每个方向的伪终端容量大约为4 kB(主站 - >从站和从站 - >主站)。


0

这取决于。

我凭经验确定这个数字在Debian版本中发生了变化:

ptsbufsize.py

#!/usr/bin/env python3
import os
from pty import openpty
from fcntl import fcntl, F_GETFL, F_SETFL
from itertools import count

def set_nonblock(fd):
    flags = fcntl(fd, F_GETFL)
    flags |= os.O_NONBLOCK
    fcntl(fd, F_SETFL, flags)

master, slave = openpty()

set_nonblock(slave)

for i in count():
    try:
        os.write(slave, b'a')
    except BlockingIOError:
        i -= 1
        break

print("pts write blocked after {} bytes ({} KiB)".format(i, i//1024))

Debian 8

$ uname -v
#1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09)

$ ./ptsbufsize.py
pts write blocked after 134144 bytes (131 kB)

Debian 9

$ uname -v
#1 SMP Debian 4.9.144-3.1 (2019-02-19)

$ ./ptsbufsize.py
pts write blocked after 19456 bytes (19 KiB)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.