Чтение из stdin с использованием read (..) и определение размера буфера

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

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

4 голоса | спросил Shay 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 21 Sep 2011 20:37:26 +0400 2011, 20:37:26

2 ответа


0

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

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

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

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

ответил Oliver Charlesworth 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 21 Sep 2011 20:41:58 +0400 2011, 20:41:58
0

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

Но метод read позволяет вам по частям читать содержимое стандартного ввода, если вы поместили вызов 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
}
ответил Cédric Julien 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 21 Sep 2011 20:46:01 +0400 2011, 20:46:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132