Действительно ли он читает символ по символу или читает некоторые байты в буфере ядра и возвращает символ пользователя по символу?Как fgetc работает внутри?
То же с fgets
?
Позвольте мне сказать, что я использую glibc и gcc-компилятор.
Действительно ли он читает символ по символу или читает некоторые байты в буфере ядра и возвращает символ пользователя по символу?Как fgetc работает внутри?
То же с fgets
?
Позвольте мне сказать, что я использую glibc и gcc-компилятор.
Почти право. Типичная современная реализация, которая имеет разделение пользователя и ядра, хранит байты в пользовательском буфере, а не в буфере ядра. Таким образом, многие звонки в fgetc
фактически инициируют несколько действительных системных вызовов.
Возможно, может и нет. Множество платформ (например, DOS) не имеют понятия о различии между ними. Это полностью зависит от платформы. –
@BillyIneal True. Но я думаю, что ОП уже вышла из строго стандартизованных ограничений с этим вопросом, так что может быть разумно обсуждать наиболее распространенную реализацию. – cnicutar
Какая «наиболее распространенная реализация»? Что касается количества компьютеров, в мире есть черты более крошечных микроконтроллеров, чем полноразмерные настольные компьютеры в мире. И у них нет разделения пространства пользователей и ядра. Также не много RISC. Проще говоря, заданный вопрос не отвечает. (Вот почему я поставил вопрос) –
Это зависит полностью от конкретной платформы/компилятора/времени выполнения/etc. Стандарт не говорит. О какой платформе вы говорите? –