2013-12-07 4 views
5

Мне не хватает формальных знаний в операционных системах и C. Мои вопросы заключаются в следующем.Чтение файла с использованием fread в C

  1. Когда я пытаюсь прочитать первые одни байты файла, используя fread в C, делает блок всего диска, содержащий этот байт вводится в память или просто байты?
  2. Если весь блок загружен в память, что происходит при чтении второй байт, так как блок, содержащий этот байт, уже находится в памяти ?.
  3. Есть ли значение при чтении файла в размере блоков диска?
  4. Где хранится в памяти сохраненный файл?

ответ

5

Вот мои ответы

  1. Более 1 блок, кэширование по умолчанию 64k. setvbuffer может изменить это.
  2. Во втором чтении нет ввода-вывода. Данные считываются из дискового кэша.
  3. Нет, файл ussuly меньше, чем его дисковое пространство. Вы получите сообщение об ошибке за размером файла, даже если вы находитесь в пределах фактического размера дискового пространства.
  4. Это часть структуры FILE. Это специфическая реализация (компилятор), поэтому не трогайте ее.

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

+0

Кэширование для ОС - это другая память, а затем буфер, используемый в структуре пользовательского пространства 'FILE'. Буфер 'FILE' задается на уровне среды, только по умолчанию устанавливается среда compilaer. – Devolus

+1

Правильно, я добавил короткое объяснение ответа. Также фиксированные опечатки :( – egur

Смежные вопросы