为了账号安全,请及时绑定邮箱和手机立即绑定

转到 crypto/ssh 包,stdoutpipe() io.Reader 的缓冲区限制是多少

转到 crypto/ssh 包,stdoutpipe() io.Reader 的缓冲区限制是多少

Go
当年话下 2023-06-05 18:16:40
我正在编写一个实用程序来使用 crypto/ssh 包在远程服务器上执行命令。我目前正在从 session.stdoutpipe() io.Reader 读取到一个 bytes.Buffer,我可以在会话完成后格式化并打印出来。文件指出:StdoutPipe func() (io.Reader, error) StdoutPipe 返回一个管道,该管道将在命令启动时连接到远程命令的标准输出。stdout 和 stderr 流之间共享固定数量的缓冲。如果 StdoutPipe 读取器的服务速度不够快,最终可能会导致远程命令阻塞。到目前为止,我的测试没有遇到任何问题,但我很想知道固定金额是多少。在命令完成之前,我没有读取管道阅读器就成功地流式传输了高达 6.5mb 的文本。有谁知道固定金额是多少,或者命令何时开始阻塞?我在源代码中找不到它。
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

它不在 Go 源代码中,因为它依赖于操作系统。


应用程序不应依赖于特定的容量:应用程序应设计为读取进程在数据可用时立即使用数据,这样写入进程就不会一直处于阻塞状态。


例如,在 Linux 上:


$ man pipe


PIPE(2)                    Linux Programmer's Manual                   PIPE(2)


NAME

       pipe, pipe2 - create pipe


Pipe capacity


       A pipe has a limited capacity.  If the pipe is full, then a write(2)

       will block or fail, depending on whether the O_NONBLOCK flag is set

       (see below).  Different implementations have different limits for the

       pipe capacity.  Applications should not rely on a particular

       capacity: an application should be designed so that a reading process

       consumes data as soon as it is available, so that a writing process

       does not remain blocked.


       In Linux versions before 2.6.11, the capacity of a pipe was the same

       as the system page size (e.g., 4096 bytes on i386).  Since Linux

       2.6.11, the pipe capacity is 16 pages (i.e., 65,536 bytes in a system

       with a page size of 4096 bytes).  Since Linux 2.6.35, the default

       pipe capacity is 16 pages, but the capacity can be queried and set

       using the fcntl(2) F_GETPIPE_SZ and F_SETPIPE_SZ operations.  See

       fcntl(2) for more information.


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信