我正在尝试模拟主从 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)