Разница между чтением и поиском (произвольный доступ) - PullRequest
0 голосов
/ 16 апреля 2020

Я не совсем понимаю, в чем отличие от чтения и поиска. Мой профессор говорит, что поиск - это более продвинутая версия чтения, которая отделяет «движение от операции». Но, к сожалению, я не совсем уверен, что это значит.

У меня также есть смутное представление о том, что поиск перемещает текущую позицию, так что все будущие чтения и записи будут неявно вычислять смещение от указанной текущей позиции. Это правильно? Если так, то как искать замену операции чтения? Кажется, они делают разные вещи, но мои заметки говорят, что linux использует поиск вместо чтения.

1 Ответ

1 голос
/ 16 апреля 2020

A read вызов прочитает указанное количество байтов из «файла». Я использую «файл», потому что фактической целью может быть каталог, сетевой сокет или даже канал, динамически генерируемый другой программой. Если цель на самом деле является файлом, каким мы его знаем, и который обычно поддерживает поиск, то вызов read также продвинет позицию смещения в соответствии с тем, сколько байтов он прочитал. Думайте об этом как о воспроизведении песни, если вы слушаете минуту и ​​делаете паузу, вы находитесь на отметке в одну минуту, и если вы продолжите (read), вы продолжите с этой последней точки. Если вы хотите go до конца песни, вам придется слушать (и ждать) длительность песни, поэтому операция O (n).

Теперь поиск эквивалентен просто прокрутите панель в любую позицию, которую вы хотите. Между прыжком ничего не читается. Вот что имел в виду ваш профессор, отделяя движение от операции. Таким образом, переход по файлу является операцией O (1). Очевидно, это возможно, только если файл поддерживает произвольный доступ. Файлы хранятся на вашем жестком диске / SSD, но магнитная лента c (которая была распространена во время разработки Unix) - нет. Я не уверен, почему в ваших заметках написано Linux, используйте seek вместо read. Очевидно, что при работе с общими файлами Linux и другие системы могут использовать seek, чтобы установить смещение для интересных данных и просто прочитать их. Например, тег ID3v1 в файлах MP3 находится в последних 128 байтах файла, поэтому ОС переместится в эту позицию для отображения информации о песне, прежде чем вернуться к началу файла, если будет сказано воспроизвести файл. Однако при чтении информации о песне и ее воспроизведении ОС все равно будет использовать read

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...