Васильев Андрей Михайлович
Версии презентации
ФС — это подсистема ядра ОС, обеспечивающая общий и регулируемый доступ к данным на энергонезависимых источниках: жёстких дисках, оптических дисках, твердотельных носителях и т.д.
На физическом уровне каждый такой носитель представляет собой последовательность из блоков одинакового размера
Для процессов и конечного пользователя была предложена древовидная структура
В задачу ОС входит преобразования логического обращения к дереву файловой системы на обращение к последовательности блоков
Приложение взаимодействует с ФС путём отправки системных вызовов
Рассмотрим ряд системных вызовов POSIX
open — открыть файл для взаимодействия, получить файловый дескрипторread — прочитать данные из файлового дескриптораwrite — записать данные в файловый дескрипторopendir — открыть каталог для чтения содержимогоreaddir — считать информацию о файлах в каталогеДанные вызовы сформированы на языке Си
Для удобства построения путей к нужным файлам была введена концепция текущего рабочего каталога
Без её помощи можно стоить пути только абсолютно, начиная с корневого каталога
/
/home/user/my-data/marks.odsЭто соответствует следующей структуре каталогов
/
└── home
└── user
└── my-data
└── marks.odsС помощью рабочего каталога можно сократить вводимый пользователем путь:
marks.odsЭти пути будут указывать на один и тот же файл, если текущий рабочий каталог
/home/user/my-data/Путь к файлу = текущий рабочий каталог + относительный путь
/home/user/my-data/ + marks.ods = /home/user/my-data/marks.odsОтносительные пути значительно сокращают скорость работы с нужными файлами, если их правильно применять
Согласно древовидному представлению мы можем двигаться в трёх направлениях:
Для движения «вверх» необходимо использовать специальный путь: ..
Например для составления пути к файлу data.txt в родительском каталоге необходимо составить относительный путь ../data.txt
Родительский каталог/
├── Рабочий каталог/
│ ├── cute-animals/
│ │ └── cat.png
│ └── picture.png
└── data.txtДля указания текущего каталога используется специальное название: .
Для указания пути к файлу picture.png в текущем каталоге следующие формы будут одинаковыми:
./picture.pngpicture.pngРодительский каталог/
├── Рабочий каталог/
│ ├── cute-animals/
│ │ └── cat.png
│ └── picture.png
└── data.txtДля указания пути к файлу cat.png, расположенному в подкаталоге cute-animals
необходимо сформировать: cute-animals/cat.png
Родительский каталог/
├── Рабочий каталог/
│ ├── cute-animals/
│ │ └── cat.png
│ └── picture.png
└── data.txtПри запуске задачи типа javaExec Gradle установит в качестве рабочего каталога
каталог проекта, т.е. каталог с файлом build.gradle.kts
Рассмотрим следующую структуру каталогов:
project
├── gradle/
├── gradlew
├── gradlew.bat
├── data/
│ └── content.txt
├── settings.gradle(.kts)
├── subproject-a/
│ ├── build.gradle(.kts)
│ └── src/
└── subproject-b/
├── build.gradle(.kts)
└── srcЕсли будет запущена команда по сборке, описанная в файле
subproject-a/build.gradle.kts, то рабочим каталогом будет каталог
subproject-a
Для доступа к данным, data/content.txt, внутри такого процесса необходимо
сформировать путь ../data/content.txt
Если путь получен от пользователя приложения, то приложению не надо вносить в него изменения
На платформе JVM приложению на языке Kotlin доступны все классы Java плюс ряд функций-расширений, которые упрощают работу с первыми
java.nio.Path предоставляет средства для формирования путей
ofresolve и
resolveSiblingjava.io.File предоставляет средства для анализа состояния файлов на файловой
системеjava.io.FileReader позволяет считывать текстовую информацию из файлаДля облегчения задач считывания и записи файлов Kotlin предоставляет
File.readText() — считывает всё содержимое файла и возвращает строкуFile.writeText() — записывает переданную строку как текст всего файлаFile.appendText() — записывает переданную строку какПри работе на платформе JVM внутри приложения строки хранятся в кодировке Unicode
При получении текстовых данных из внешних источников JVM необходимо выполнить преобразование данных в Unicode
При сдаче лабораторной работы внешнее по отношению к приложению окружение будет использовать Unicode, как и в компьютерной аудитории