Длина стандартного ввода ограничена? - PullRequest
6 голосов
/ 12 марта 2010

Есть ли какие-либо ограничения длины ввода стандартного ввода (в количестве входной или входной скорости)?

Ответы [ 6 ]

7 голосов
/ 12 марта 2010

Нет . stdin не имеет ограничений по длине или скорости.

Если вы хотите получить гигабайты данных через stdin, вы можете, и ваш компьютер предоставит их так быстро, как только сможет.

2 голосов
/ 12 марта 2010

По общему мнению других любимых вопросов и ответов :

Не должно быть ограничения на размер потока (будь то стандартный или другой). Однако вы можете проверить, где хранятся эти символы ... Достаточно ли места для их хранения?

Попробуйте просто код, подобный этому (без сохранения!):

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

и посмотрите, имеет ли оно такое же ограничение.

1 голос
/ 12 марта 2010

Попробуйте:

Команда yes unix выводит строки y бесконечно. Передайте его в C-программу, которая просто читает stdin и помещает его в стандартный вывод (например, cat, но tr 'y' 'y' также работает). Дождитесь сбоя cat или пока ваше терпение не достигнет предела:

yes | cat

В отношении коэффициента скорости ограничения определяются не языком или ОС, а аппаратным обеспечением (ЦП, ОЗУ, жесткий диск, SATA, сеть, ...)

1 голос
/ 12 марта 2010

Вероятно, это зависит от драйвера stdin!

Стандарт (как концепция) не имеет ограничений.

Я ожидаю, что разработчики ядра (любых систем) сделали несколько вариантов дизайна, которые добавляют ограничения.

1 голос
/ 12 марта 2010

На stdin нет ограничений по длине.Если вы не можете получить большие объемы данных, именно ваш код создает проблемы.

0 голосов
/ 12 марта 2010

Существуют ограничения в скорости передачи. В общем, они примерно такие же, как любой канал "UNIX". Существуют более эффективные механизмы, предлагаемые большинством операционных систем, но каналы работают довольно быстро ... при условии, что вы не используете printf и подобные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...