我正在研究树莓派,并试图将一些文本文件粘贴到命令行文本编辑器nano
中……但文本最终在远程端损坏(部分/不完整的文本)。我只能猜测我的PC(xubuntu 16.04)的粘贴功能推送数据太快(串行波特率为115200)。
我可以以某种方式减慢粘贴功能吗?
我正在研究树莓派,并试图将一些文本文件粘贴到命令行文本编辑器nano
中……但文本最终在远程端损坏(部分/不完整的文本)。我只能猜测我的PC(xubuntu 16.04)的粘贴功能推送数据太快(串行波特率为115200)。
我可以以某种方式减慢粘贴功能吗?
我发现它
screen
有一个slowpaste功能! https://gist.github.com/jandahl/8436cd6a99d56efd9ff4安装屏幕
如果没有,请制作一个 .screenrc 文件:
.screenrc
那么只需添加最后一行:defslowpaste 20
使用适当的串行端口启动屏幕(树莓派,第一代,默认为 115200 波特):
screen /dev/ttyUSB3 115200
玩得开心!
这种假设是错误的。终端驱动程序将始终使用配置的波特率从其输出队列中写入数据,并且
write(2)
终端将返回一个短计数,或者如果输出队列中没有更多空间则阻塞(或者不是阻塞,而是返回-1,如果终端设置errno
为EAGAIN
非阻塞模式,则设置为)。串行驱动程序不会“调整”波特率以适应它必须推送的数据量。您可以轻松测试是否有两台可以通过串行线连接的机器(或者您可以将同一台机器连接到自身,例如 2 个 USB-> 串行适配器、两个通过零调制解调器电缆连接的串行端口等)。
例如。如果
/dev/ttyUSB0
机器 A 连接到/dev/ttyUSB1
机器 B:在机器 A 上:
在机器 B 上:
现在,在 machine 的命令行中粘贴一些大文本
B
,并在 machine 上以每秒约 5 个字符的速度很好地看到它A
。真正的问题是 brogrammers 忽略退出状态
write(2)
或假设虽然它可以返回错误,但它永远不会返回少于所需的计数。解决方案是修复或停止使用他们的垃圾,而不是使用既不可靠也不非常有效的创可贴。此外,如果电缆/连接不良/嘈杂,则必须降低波特率,否则数据将变成二进制垃圾,并且某些串行适配器可能会硬锁定并且必须重置。
如果其中一个设备无法处理其标称波特率,并且不支持任何类型的硬件或软件流控制 (xon/xoff),则也应降低波特率。