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

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

我正在尝试模拟主从 Ptys,但不知道缓冲区限制是多少,不同版本的 Linux 上缓冲区限制会有所不同吗?有没有方法(系统调用)来获取主从读写使用的缓冲区的最大大小?

答案1

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

答案2

这取决于。

我根据经验确定这个数字在不同的 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)

相关内容