标准输入(stdin)的长度有限制吗?

9
有没有stdin输入长度的限制(输入量或输入速度方面)?

5
为什么不把让你困扰的代码贴出来呢? - naumcho
问题很普遍,涉及主要规则和概念。 - Rella
缓冲输入的数量由操作系统决定,我认为。如果缓冲区已满,则尝试写入可能会阻塞,如果缓冲区为空,则尝试读取可能会阻塞。(这只是我的猜测)。 - dreamlax
键盘打字与我瞬间粘贴50000个字符无关 =) - Rella
2
'cat /dev/zero | wc -c'。如果它打印出一个值,那就是极限。如果没有,... - Gautham Ganapathy
显示剩余3条评论
6个回答

9

. stdin 没有长度或速度限制。

如果你想通过 stdin 获取几个 GB 的数据,你可以这样做,你的电脑会尽可能快地提供它。


2
根据大家喜欢的其他问答网站
流大小不应该有限制(无论是标准输入还是其他类型)。然而,你可能需要检查一下存储这些字符的位置...是否有足够的空间来存储它们所有?
尝试使用这样的代码(不要存储!):
for (;;) {
    int c = getc(stdin);
    if (c == EOF) { break; }
    putc(c, stdout);
}

"并查看它是否有相同的限制。"

1

试一下:

yes Unix 命令会无限输出 y。将其管道传输到一个只读取 stdin 并将其放在 stdout 上的 C 程序中(例如 cat,但 tr 'y' 'y' 也可以)。等待直到 cat 崩溃或您的耐心达到极限:

yes | cat

关于速度因素,限制并不是由语言或操作系统决定的,而是由硬件(CPU、RAM、硬盘、SATA、网络等)决定的。

1
当另一条命令需要确认而无法禁用时,它会被使用(比如硬编码的rm -i)。 - mouviciel

1

stdin 没有任何长度限制。如果您无法接收大量数据,则是您的代码造成了问题。


发送数据的速度限制是多少? - Rella

1

它可能取决于stdin驱动程序!

stdin(作为一个概念)没有限制。

我预计内核开发人员(任何系统的)都会做出一些设计选择,添加限制。


0

传输速度存在限制。一般来说,它们与任何“UNIX”管道的速度大致相同。大多数操作系统提供了更有效的机制,但是管道非常快...假设您没有使用printf等函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接