TargeTSan
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Infinite Retrieval Касательно твоей задачи по буферизации. Stdin, stdout, stderr и так являются буферизованными потоками, т.е. сначала забиваем буфер, потом передаём дальше по назначению. Что, впрочем, и так всем понятно. Прежде всего определись, что тебя не устраивает в стандартном подходе. а) возможность "пролететь" с размером буфера и получить переполнение; тут или используй функции, отрезающие всё лишнее, или пиши свою, с посимвольным чтением, которая будет работать с пачкой блоков переменной длины, т.е. возвращает упорядоченный массив указателей на блоки текста б) само по себе двойное выделение памяти - не парься; внутренний iobuffer либо статический, либо выделен один раз. А то что приходится выделять каждый раз память - не смертельно аж ни разу, ты ж не заставишь бедного пользователя вводить по 100кб текста, обычно нужно что-то коротенькое. Выделить в стеке сотню байт при вызове какой-то функции ввода-вывода не есть плохо. Потому как в случае ввода с клавиатуры самое медленное звено в цепочке - юзер, который за клавой сидит. Если ну очень хочется, можешь делать небуферизованный ввод и ручками подменять буфер. Не могу, правда, придумать, когда это может понадобиться. |