C fopen читает весь файл в память? - PullRequest
0 голосов
/ 05 апреля 2019

Мне интересно, достаточно ли умна команда fopen, чтобы прекратить чтение файла, если он слишком большой, и затем подождать, пока какая-нибудь дальнейшая команда чтения продолжит чтение.

В таком случае, насколько велика _iobuf?

Ответы [ 3 ]

3 голосов
/ 05 апреля 2019

fopen(...) не проверяет размер;он просто возвращает указатель файла.Вы случайно не думаете о fread(...)?

Вы всегда можете найти размер файла, который собираетесь прочитать, используя stat (...) системный вызов.

2 голосов
/ 05 апреля 2019

В соответствии со стандартом C, setbuf() / setvbuf() должен вызываться после fopen() и перед чем-либо еще.Они устанавливают режим буферизации и размер буфера для только что открытого файла.Это подразумевает, что по крайней мере на уровне C fopen() ничего не читает из файла, который он открыл.

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

_iobuf не определено в стандарте C.Хотя я могу «угадать», что это такое, вряд ли вам нужно о чем-то беспокоиться (в любом случае он не будет содержать файловый буфер фиксированного размера C, а скорее будет содержать пару значений: указатель на буфер и размер буфера).

1 голос
/ 05 апреля 2019

Если вы посмотрите на здесь , вы увидите, что #define BUFSIZ 1024 Но это зависит от вашей реализации библиотеки fopen.AFAIK, нет стандартного определения.

...