Как определить, записаны ли данные на диск или кэшированы?

Я изучаю вызовы операций с файлами в Linux. Функции read() и write() и многие другие используют кеш для повышения производительности, и я знаю, что fsync() может передавать данные из кеша на дисковое устройство.

Однако есть ли какие-либо команды или системные вызовы, которые могут определять, кэшируются ли данные или записываются на диск?

  • Отправка сообщения от одного пользователя терминала другому пользователю
  • Почему Debian предпочитает временный файл, заменяющий оригинал на изменение байтов в исходном файле?
  • Почему у / proc / self / fd / 0 нет бит записи в последовательном сеансе перед запуском оболочки?
  • warning: Файловая система, похоже, смонтирована только для чтения
  • Как разрешить пользователю OpenLDAP записывать данные в точку монтирования SSHFS?
  • 2 Solutions collect form web for “Как определить, записаны ли данные на диск или кэшированы?”

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

    С другой стороны, процесс может выбрать, хочет ли он, чтобы записанные данные были немедленно сохранены на диске или только после переменной задержки, которая является общим случаем. Это делается с помощью флага O_SYNC при открытии файла.

    Существует также флаг O_DIRECT, который при поддержке заставляет все входы / выходы обходить кеш чтения и записи и перейти непосредственно на диск.

    Наконец, сам жесткий диск может свободно реализовать свой собственный кеш, так что даже после того, как был вызван синхронный вызов записи, на дисковых планшетах нет никаких гарантийных данных.

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

    Linux и Unix - лучшая ОС в мире.