Чтение из stdin с использованием read (..) и определение размера буфера - PullRequest
4 голосов
/ 21 сентября 2011

Мне было интересно, если кто-нибудь может сказать мне, если есть способ динамически выделить буфер при чтении ввода из стандартного ввода, используя read(...) Например:

n = read(0, buffer, sizeof ?); Как я могу убедиться, что числоколичество байтов, считанных из stdin (здесь 0), совпадает с buffer?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

Вы не можете. Вы делаете read в буфер фиксированного размера, например ::1002

char buf[BUF_SIZE];
int num_read = read(0, buf, BUF_SIZE);

, а затем выясните, есть ли еще доступные данные (обычно проверяя, равно ли num_read BUF_SIZE, но в некоторых случаях, возможно, вам нужно интерпретировать сами данные). Если есть, то вы делаете еще одно чтение. И так далее.

Вам решать, как объединить все прочитанные данные.

1 голос
/ 21 сентября 2011

Вы не можете (если у вас нет навыков предвидения) определить размер того, что вы получите.

Но метод read позволяет вам по частям читать содержимое stdin, если вы поместите вызов read () в цикл (while your_stop_condition), вы сможете прочитать все, что вам нужноиз стандартного ввода, пакетами.

char buffer_to_read[SIZE];
int bytes=0;

while your_stop_condition
{
   bytes = read(0, buffer_to_read, SIZE);
   // do what you want with your data read
   // if bytes < SIZE, you read an EOF
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...