Метод доступа к файлам в Linux - PullRequest
0 голосов
/ 09 октября 2011

Прочитайте в учебниках, что в основном существует два метода доступа к файлам;последовательный и прямой.Какой из них мы используем в Linux?

В команде чтения мы даем количество байтов для чтения и в какой буфер.Таким образом, у нас есть последовательный доступ в Linux?

Но физически у нас хранятся файлы, это блоки?Я не мог относиться к этому.

Возможен ли прямой доступ в Linux?

Я читал об этих моделях доступа в Концепции операционной системы от Galvin

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Возможны оба варианта.

Когда вы делаете read для обычного файла, он последовательно читает файл, каждый раз передвигая указатель файла на нужную величину.

НоВы также можете использовать seek для перемещения к произвольной точке в файле.

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

Так что почти все возможно, но некоторые типы файлов имеют ограничения.

(Доступ к файлам с прямымВвод / вывод (O_DIRECT флаг) - это совсем другое понятие.)

0 голосов
/ 10 октября 2011

Конечно, вы можете читать / писать с произвольной позиции в открытом (дисковом) файле.

Существует несколько методов выполнения случайного ввода-вывода, которые оптимизированы для различных видов использования.

  • Самый простой метод - это seek (), за которым следует read () или write ().Указатель файла перемещается на количество прочитанных / записанных байтов, и это может позволить последовательный ввод-вывод после случайного перехода.Считайте, что seek () логически вращает старый ленточный накопитель «катушка к катушке» (даже если у нас его больше нет).
  • Системные вызовы pread и pwrite комбинируют seek () и read/ write (), специально для использования в многопоточных программах (где два системных вызова приводят к состоянию гонки).Они не меняют указатель файла, так что вы можете думать об этом логически, просто взяв или поместив случайный бит данных.
  • mmap () отображает файл в память - где вы можете затем сделать это, чтовы будете использовать обычные манипуляции с указателем / памятью (например, memset, memcpy и т. д.).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...