О EOF и синхронизации Reader / Writer

Цитата

откуда О.С. знает, что писатель все еще пишет. ? ... Что такое рабочий процесс EOF для файла (дескриптор закрытия файла, например ^ D или ^ z)? что произойдет, если EOF никогда не будет записан?

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

какие могут быть другие нежелательные сценарии?

Как O.S вычисляет EOF при чтении файла?

-Нихил

P.S: Текущая операционная система - это Windows, но я не против изучить интересную функцию для того же самого в unix.

Цитата

Дополнительные правки и дополнительная информация по вопросу

Теперь, когда я знаю, что EOF не является символом, он не может быть записан в данные файла. ЕСЛИ О.С. определяет EOF, используя File_size, как то, что указал даже @saurabh.

(->) EOF при чтении (вероятно, будет определяться по размеру файла, который будет храниться в таблице дисков соответствующей файловой системы))

  • Таким образом, процесс продолжает опрашивать таблицу файлов для определения размера файла, чтобы определить EOF, поскольку могут быть случаи нефиксированного размера файлов.
  • Насколько мне известно, EOF встречается, когда вы читаете за EOF (в нашем случае размер файла). Предположим, что писатель пишет с перерывами, а читатель читает блоки. ТАК, если читатель попытается прочитать больше, чем доступный кусок, будет брошен EOF? Но Writer еще не сообщил об EOF?

person Niks    schedule 28.05.2012    source источник
comment
Для файлов не существует специальных байтов или байтовых последовательностей, которые означают конец файла. Программа, записывающая файл, может писать в любое время, пока файл открыт, ОС будет знать, что программа завершила работу с файлом, только когда он закрыт.   -  person Some programmer dude    schedule 28.05.2012
comment
Наконец, я нашел этот пост очень полезным для объяснения части eof и ее рабочего процесса. можем-мы-напишем-себе-персонажа. особенно сообщение @ b-gen-jack-o-neill   -  person Niks    schedule 28.05.2012


Ответы (2)


  1. Пока программа не закроет файл. ОС предполагает, что файл можно читать / записывать или и то, и другое (зависит от режима открытия файла).

  2. EOF - это ничто, но ОС знает это по размеру файла. Допустим, ваш файл имеет размер 100 байтов, и вы запрашиваете чтение из байта 99 и запрашиваете еще 6 байтов, тогда ОС знает, что файл имеет размер до 100 байтов, поэтому он вернет EOF.

person saurabh jindal    schedule 28.05.2012
comment
Спасибо друг !. Добавляем на 2 балла. Если O.S определяет EOF по размеру файла, что произойдет, если размер файла неизвестен. Или, возможно, изменяется динамически (добавляется контент) ?. - person Niks; 28.05.2012

Если вы пишете в файл из одного процесса и читаете из него из другого, вы можете вместо этого изучить использование каналов. Это специальные файлы, разработанные именно для ваших целей: вы можете писать только на одном конце, читать на другом конце, и читатель блокируется или получает уведомление, если нет данных для чтения ...
И да, есть нет специального маркера EOF. Если вы используете обычные файлы и не любите головную боль, просто не связывайтесь с ними одновременно из нескольких процессов.

person Torp    schedule 28.05.2012
comment
да, кое-что похожее, а затем переносит его через сокет. - person Niks; 28.05.2012