Как считать строку из stdin в буффер? Я знаю только наиболее тупой способ - читать по байту и сравнивать его с '\n', но не будет ли это слишком медленным? Не существует ли способа лучше, например каким-нибудь образом читать большими блоками, а излишек "запихивать" обратно в поток?
Мой вариант:
char *readline() {
#define BUFSIZE 512
char *r = malloc (BUFSIZE);
size_t buf = 512;
size_t bread = 0;
size_t bnow = 0;
while (bnow = read (0, r + bread, buf - bread))
{
bread += bnow;
if (buf - bread < BUFSIZE / 2)
{
buf += BUFSIZE;
r = realloc (r, buf);
}
}
r[bread] = 0;
return r;
}
p.s. Можно использовать только системные вызовы. Использовать функции libc нельзя, за исключением функций управления памятью (malloc, free, realloc, strdup) и каких-нибудь совсем простых (strlen, memcpy, strdup, strchr, ...).
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Как послать сигнал во время вызова read () или write () ? (2016)
- Форум Не могу разобраться с ошибкой сегментирования (2017)
- Форум Программа на Си падает, при выделении памяти (2014)
- Форум Как в sqlite3 сделать «select * from ...» ? (2011)
- Форум Алгоритм обработки экранирующих символов при работе с последовательным портом. (2016)
- Форум socket error (2009)
- Форум Помогите разобраться с malloc СИ (2017)
- Форум Реализация системного вызова ? (2008)
- Форум Вывести содержание бинарного файла (2013)
- Форум Консольный обмен сообщениями (2017)