2010-03-12 102 views
7

是否有任何标准输入长度限制(输入或输入速度的数量)?stdin的长度是否有限制?

+5

你为什么不发布代码给你带来麻烦 – naumcho 2010-03-12 02:44:51

+0

问题是一般性的。关于主要的概念和概念。 – Rella 2010-03-12 02:47:48

+0

缓冲输入的数量由操作系统决定,我想。如果缓冲区已满,则试图写入可以/将被阻塞,并且如果缓冲区为空,尝试的读取可以/将被阻止。 (我在这里猜测)。 – dreamlax 2010-03-12 02:49:16

回答

1

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

stdin(作为一个概念)没有限制。我期望内核开发者(任何系统的)都做出了一些设计选择,这些选择会增加限制。

1

stdin没有任何长度限制。如果你无法接收大量的数据,那么你的代码会产生问题。

+0

以及任何发送数据限制的SPEED? – Rella 2010-03-12 02:56:10

2

根据每个人的其他favorite Q&A site

不应该有到流大小的限制(不管是标准输入或其他)。然而,你可能想要检查的是你存储这些角色的地方......是否有足够的空间来存储它们?

尽量只这样的代码(不存储!):

for (;;) { 
    int c = getc(stdin); 
    if (c == EOF) { break; } 
    putc(c, stdout); 
} 

,看看是否有相同的限制。

0

转移速度有限制。通常,它们与任何“UNIX”管道大致相同。大多数操作系统都提供了更高效的机制,但管道速度相当快......假设您没有使用printf &等。

6

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

如果你想通过stdin获得千兆字节的数据,你可以,并且你的计算机将尽可能快地提供数据。

1

尝试:

yes UNIX的y无休止命令输出行。将它管到一个只读取stdin并将其放在stdout上的C程序(例如cat,但tr 'y' 'y'也可以)。等到cat崩溃或者您的耐心达到了极限:

yes | cat 

关于速度的因素,限制不受语言或操作系统,但由硬件(CPU,RAM确定,硬盘,SATA,网络,... )

+0

真的有一切的命令。 – 2010-03-12 09:52:44

+1

当另一个命令需要确认无法禁用时(如硬编码'rm -i'),它被使用。 – mouviciel 2010-03-12 10:27:12