Программирование на C

Как использовать системный вызов Fsync в C

Как использовать системный вызов Fsync в C

Fsync используется для координации состояния файла в ядре с любым устройством хранения. Системный вызов fsync () передает («сбрасывает») все измененное в ядре содержимое (i.е., измененный буфер для) дескриптора файла fd на дисковую машину (или любое другое устройство постоянного хранения), где такой файл остается. Он даже очищает детали файла. Системный вызов fsync работает с одним файлом. Все обновления файла будут сброшены. Если несколько задач редактируются в одном файле, системный вызов fsync будет приостановлен до того, как все обновления будут перенесены на диск. Если система сообщит об успешной конвертации, звонок будет заблокирован. Использование fsync () не гарантирует, что, возможно, включение файла в файловую систему также попало на диск. Однако для этого требуется соответствующая функция fsync () в файловом дескрипторе папки.

Необходимые компоненты для установки:

Таким образом, системный вызов fsync требует установки некоторых библиотек для работы с ним. Если кто-то хочет проверить дополнительную информацию о команде fsync, он / она должны установить пакеты manpages-dev в своей системе Linux. Итак, мы увидим, как это сделать. Используйте клавишу Ctrl + Alt + T на клавиатуре, чтобы запустить терминал командной строки Linux. Теперь, чтобы установить пакет manpages-dev, попробуйте следующую команду apt install, за которой следует пакет с именем «manpages-dev». Для продолжения процесса установки потребуется пароль вашей учетной записи для Linux. Итак, введите свой текущий пароль учетной записи Linux и нажмите клавишу Enter на клавиатуре. Он быстро запустит установку и настройку страниц руководства в вашей системе Linux. Устройтесь поудобнее, пока он не завершит процесс установки.

$ sudo apt install manpages-dev

После установки вы можете использовать следующую команду, чтобы проверить информацию о системе fsync.

$ man 2 fsync

Вывод команды man прилагается ниже. Вы можете прочитать любую информацию о нем, чтобы понять концепцию системного вызова «fsync» в системе Linux. Нажмите кнопку «q» на клавиатуре, чтобы закрыть это окно.

Еще одно предварительное условие, необходимое для использования идентификатора системного вызова fsync в компиляторе GCC. Это потому, что мы используем системный вызов fsync на языке C. Итак, чтобы выполнить и скомпилировать код языка C, в нашей системе должен быть установлен какой-то пакет компилятора. Итак, у нас есть компилятор GCC. Вы можете установить его с помощью очень простой команды sudo apt, как показано ниже. Он завершит установку за несколько минут, и вы можете легко записывать коды C в файлы.

$ sudo apt install gcc

Пример:

Давайте начнем работать над командой fsync, чтобы хорошо ее понять. Прежде всего, вам нужно создать файл C-типа с помощью редактора nano в оболочке командной строки. Для этого попробуйте выполнить следующий простой запрос в оболочке.

$ nano новый.c

После того, как файл был создан и открыт, самое время написать код на C. Таким образом, вы можете увидеть приведенный ниже длинный код в файле nano. Первые 7 строк содержат файлы заголовков, которые необходимо включить в файл редактора для правильной работы системного вызова «fsync». После этих файлов заголовков мы определили основную функцию с целочисленным типом возврата как «int». Эта функция содержит два параметра. Один из них представляет собой целочисленный тип, а другой - массив символьных типов. В пространстве основной функции мы объявили строку символьного типа «* str» и определили для нее значение строкового типа. После этого мы также объявили две переменные целочисленного типа, которые будут использоваться в качестве дескрипторов файлов в следующих строках. В следующей строке мы использовали функцию системного вызова create, чтобы создать новый файл с именем «test.txt »и права чтения и записи в качестве смещения в параметре. Мы вернули содержимое этого файла в файловый дескриптор «fd». Мы определили оператор if в этом коде C. Если значение или указатель индекса файлового дескриптора равно «-1», он выдаст ошибку, чтобы вызвать функцию creat () для создания нового файла. Дескриптор «fd» меньше «-1» означает, что указатель находится в позиции -1.

Функция exit () будет вызываться перед закрытием оператора if. Затем мы использовали вызов метода записи для сбора строкового значения из буфера и записи его в файл «test.txt »с использованием файлового дескриптора« fd ». Эти данные были возвращены в переменную «ret». Если значение переменной Ret меньше -1, это означает, что данные не были записаны в файл. Итак, вам нужно снова вызвать функцию записи и выйти из оператора if. Мы определили системный вызов fsync и дали ему файловый дескриптор «fd» в качестве значения параметра для синхронизации файлового дескриптора с дисковым устройством. После вызова метода «закрыть» он быстро запишет данные на диск и закроет файловый дескриптор. После этого основная функция будет закрыта. Сохраните этот файл с помощью сочетания клавиш «Ctrl + S» и закройте файл «новый.c »с помощью сочетания клавиш« Ctrl + X ».

После закрытия файла nano пришло время скомпилировать представленный выше код. Для компиляции кода мы должны использовать компилятор gcc. Итак, выполните приведенный ниже запрос gcc, чтобы скомпилировать «новый.c ”файл.

$ gcc новый.c

Теперь нам нужно выполнить этот код, используя простой a.out в оболочке, как показано ниже. Эта команда просто выполнит код и ничего не вернет, но данные были записаны на диск в конце процесса.

$ ./ а.вне

Проверьте файл, который был создан в коде C, и в нем есть строковое значение.

$ cat тест.текст

Заключение

Мы кратко обсудили очень простой и линейный пример системного вызова fsync, чтобы понять его концепцию.Надеюсь, теперь вы можете легко использовать системный вызов fsync в Linux.

Полезные инструменты для геймеров Linux
Если вам нравится играть в игры на Linux, скорее всего, вы использовали приложения и утилиты, такие как Wine, Lutris и OBS Studio, для улучшения игров...
Игры HD Remastered для Linux, ранее не выпускавшиеся для Linux
Многие разработчики и издатели игр придумывают HD-ремастеры старых игр, чтобы продлить жизнь франшизы, порадовать фанатов, требующих совместимости с с...
Как использовать AutoKey для автоматизации игр под Linux
AutoKey - это утилита автоматизации рабочего стола для Linux и X11, запрограммированная на Python 3, GTK и Qt. Используя его функции сценариев и MACRO...