Как реализовать fgets с помощью низкоуровневого ввода-вывода? - PullRequest
0 голосов
/ 15 октября 2018
char *fgets(char *str, int n, FILE *stream)

Я понимаю, что эти два очень разные.fgets работает с FILE *, read работает с файловым дескриптором.fgets читает до новой строки, читает читает, сколько вы говорите.Можно ли реализовать fgets или посмотреть системный код для fgets?

1 Ответ

0 голосов
/ 15 октября 2018

fgets может быть эффективно реализовано только поверх буферизации stdio;в противном случае, поскольку не существует базового варианта read, который останавливается на первой новой строке, вам придется повторно вызывать read с запрошенной длиной 1.

Если вы заинтересованы в чтении источника длянекоторые реализации, вот glibc:

, а вот мусли:

...