169 похожих чатов

Зачем тебе столько раз сискол звать только ради того, что

б считать строку?

40 ответов

27 просмотров

Но внутри-то оно читает сколько это возможно во внутренний буфер и потом оттуда отдаёт. Посмотри вывод strace.

Денис-Rabbit Автор вопроса
k4leg
Но внутри-то оно читает сколько это возможно во вн...

Ну так-то мне достаточно убрать флаг нормализации и буферизация на этом закончится)

Денис Rabbit
Ну так-то мне достаточно убрать флаг нормализации ...

А ты не убирай. С таким успехом я могу отключить стандартную библиотеку.

Денис-Rabbit Автор вопроса
Денис Rabbit
Ну так её и ручками написать можно

Все возможно, только вот нужно ли это.

Денис-Rabbit Автор вопроса
k4leg
Все возможно, только вот нужно ли это.

А ещё не стоит забывать, что гораздо эффективнее вызвать 1 раз функцию, нежели 4 тыс. раз)

Денис Rabbit
А ещё не стоит забывать, что гораздо эффективнее в...

Это да, но иногда элегантность важнее усложнения логики — это называется преждевременная оптимизация.

Денис-Rabbit Автор вопроса
k4leg
Это да, но иногда элегантность важнее усложнения л...

К тому же в случае ручного буфера всегда можно выбрать его размер исходя из ожидаемых данных, что также оптимизирует программу, а если для тебя пара доп строчек - это усложнение логики, то сочувствую

Денис Rabbit
К тому же в случае ручного буфера всегда можно выб...

И как же ты решишь эту задачу таким образом, учитывая что дальше читать нельзя, чтобы не исчерпать непозиционируемый терминальный ввод?

Денис-Rabbit Автор вопроса
k4leg
И как же ты решишь эту задачу таким образом, учиты...

Ну во-первых вам стоит понимать, что буфер стандартного ввода никакого отношения к буферам scanf getchar и тд не имеет. Т.к. он является частью объекта ввода/вывода с 0 номером(зачастую) в таблице дескрипторов его атрибутов.

Денис Rabbit
Ну во-первых вам стоит понимать, что буфер стандар...

Что? getchar() и scanf() напрямую влияют на внутренний библиотечный буфер stdin.

Денис-Rabbit Автор вопроса
k4leg
Что? getchar() и scanf() напрямую влияют на внутре...

Ну вам стоит азы подтянуть, т.к. вы путаете буфер экземпляра структурки FILE, которым и является stdin, с буферами объектов ядра

Денис-Rabbit Автор вопроса

Как минимум мой ответы выше содержат как раз именно инфу о буфере объекта стандартного ввода ядра, о чём ещё может идти речь при упоминании таблицы дескрипторов и снятия флага нормализации?)))

Денис Rabbit
Как минимум мой ответы выше содержат как раз именн...

Таки напишите, как вы видите "эталонную" реализацию данной фунции. Не вижу способов, чтобы вышеупомянутая проблема не была затронута, самому интересно как обойти, хотя бы что-то конкретное по этому поводу напишите.

Денис-Rabbit Автор вопроса

Размером буфера логично, смысл выделять буфер бо́льшего размера, чем размер чтения?

Денис Rabbit
Размером буфера логично, смысл выделять буфер бо́л...

Так а если в самом начале будет новая строка, остальное попросту исчезнет?

Денис-Rabbit Автор вопроса
k4leg
Так а если в самом начале будет новая строка, оста...

Почему? Просто повторно вызываем нашу функцию для считывания следующей строки, буфер в которой имеет квалификатор статик

Денис Rabbit
Почему? Просто повторно вызываем нашу функцию для ...

Так оно исчезнет, все что мы прочитали? Т. е. прочитали допустим 4096 байт, в начале новая строка. Остальные 4095 исчезнут?

Денис-Rabbit Автор вопроса
k4leg
Так оно исчезнет, все что мы прочитали? Т. е. проч...

Квалификатор статик, достаточно вначале проверять пустой ли буфер у нас и если нет - читать из него, потом снова со стандартного ввода

Денис Rabbit
Квалификатор статик, достаточно вначале проверять ...

Что за квадификатор магический такой? Тоже хочу, как сделать?

Денис-Rabbit Автор вопроса
Денис Rabbit
char *get_str(int fd) { static char buff[BUFF_...

И что? Как мне мои родные 4095 байт вернуть?

Денис-Rabbit Автор вопроса
k4leg
И что? Как мне мои родные 4095 байт вернуть?

Они будут храниться в этом буфере, можно также сделать статик переменную offset, в которой хранить оффсет для данного буфера

Денис-Rabbit Автор вопроса
k4leg
А понял, ну и костыли же.

Да не, с чего бы костыли? Все так делают

Денис Rabbit
Да не, с чего бы костыли? Все так делают

А вдруг кто-то изменил позицию или кто-то другой захотел те сокральные 4095 байт?

k4leg
А вдруг кто-то изменил позицию или кто-то другой з...

А, ты не в той функции сделал, а в другую выделил.

Денис-Rabbit Автор вопроса
k4leg
А вдруг кто-то изменил позицию или кто-то другой з...

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

Денис-Rabbit Автор вопроса

С чего бы? При работе исключительно с этой функцией всё работает

Денис Rabbit
Ну это бред, кто может изменить позицию, если эта ...

Таки и чем это неприкрытое непотребство лучше стандартной библиотеки?

Денис-Rabbit Автор вопроса
k4leg
Таки и чем это неприкрытое непотребство лучше стан...

Тем, что ты сам можешь выставлять размер блока чтения, при этом одним предефайном, таким образом довольно быстро сможешь найти оптимальный размер для ожидаемых данных и своей системы.

Денис-Rabbit Автор вопроса

Аргументация будет?

Денис-Rabbit Автор вопроса

А у меня можно прочитать выше)

Денис Rabbit
Аргументация будет?

У вас аргументация как у Михалкова: "Если я что-то утверждаю, а вы опровергаете, то это ВЫ должны предоставить доказательства, а не я."?

Денис-Rabbit Автор вопроса

Ужас, а если внимательно посмотреть?

Денис-Rabbit Автор вопроса
k4leg
У вас аргументация как у Михалкова: "Если я что-то...

Теоретически я всю аргументацию расписал выше, тесты под r9 5900 могу завтра приложить

Денис Rabbit
Теоретически я всю аргументацию расписал выше, тес...

Только с тем же уровнем абстракции и теми же "куртизанками".

Денис-Rabbit Автор вопроса

Но если ты так сильно хочешь доказать, что я не прав - вперёд, доказывай, только аргументы не забудь захватить)

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта