gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:07:45 30 4
gpt4 key购买 nike

我正在编写一个实用程序,使用 crypto/ssh 包在远程服务器上执行命令。我目前正在从 session.stdoutpipe() io.Reader 读取到 bytes.Buffer,我可以在 session 完成后格式化并打印出来。

文档指出:

StdoutPipe func() (io.Reader, error) StdoutPipe returns a pipe that will be connected to the remote command's standard output when the command starts. There is a fixed amount of buffering that is shared between stdout and stderr streams. If the StdoutPipe reader is not serviced fast enough it may eventually cause the remote command to block.

到目前为止,我的测试没有遇到任何问题,但我很想知道固定金额是多少。在命令完成之前,我没有读取管道阅读器就成功地流式传输了高达 6.5mb 的文本。

有谁知道固定金额是多少,或者命令什么时候开始阻塞?我在源代码中找不到它。

最佳答案

它不在 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.

关于转到 crypto/ssh 包,stdoutpipe() io.Reader 的缓冲区限制是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613082/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com