Библиотека сайта rus-linux.net
date , в котором, в свою очередь, будет содержаться информация о текущей дате.
В первую очередь следует убедиться в том, что вы установили компоненты FUSE в вашу систему. В Ubuntu для этого следует использовать команду:
sudo apt-get install fuse
После этого нужно установить модуль Python, который будет использоваться для создания файловой системы:
sudo pip install fusepy
Теперь у нас есть все что нужно и мы можем приступить к разработке кода. Большая часть этого кода будет представлять собой реализацию класса нашей файловой системы. Структура этого класса выглядит следующим образом:
class Context(LoggingMixIn, Operations): def getattr(self, path, fh=None): #код def read(self, path, size, offset, fh): #код def readdir(self, path, fh): #код access = None flush = None getxattr = None listxattr = None open = None opendir = None release = None releasedir = None statfs = None
Как несложно заметить, существует 12 операций, которые пользователи могут выполнить по отношению к любому элементу файловой системы, при этом лишь три из них будут использоваться в нашей простейшей программе. Мы присвоили всем остальным методам класса значение None для того, чтобы избежать проблем в случае их задействования пользователем. Тремя интересующими нас операциями являются операции получения атрибутов файла, чтения файла и чтения содержимого директории. Нам придется реализовать каждый из этих методов для того, чтобы возвращать корректный результат при его вызове.
Файловая структура диска | Информатика 7 класс #15 | Инфоурок
Наша файловая система корректно функционирует и позволяет получить информацию о текущей дате.
Наши атрибуты
В первую очередь я предлагаю рассмотреть метод getattr . Данный метод будет вызываться тогда, когда реализации файловой системы понадобится получить атрибуты файла. В него будут передаваться два параметра: путь к файлу и его хэндл (мы будем использовать лишь путь к файлу). Операционная система ожидает, что эта функция возвратит словарь со всеми актуальными значениями атрибутов файла. В рамках нашей файловой системы будут доступны лишь два пути: / , соответствующий корневой директории файловой системы, и /date , соответствующий файлу с информацией о текущей дате. Исходя из этого, наш код для формирования словаря с значениями атрибутов файлов будет выглядеть следующим образом:
def getattr(self, path, fh=None): if path == ‘/’: attr = dict(st_mode=(S_IFDIR | 0755), st_nlink=2) elif path == ‘/date’: attr = dict(st_mode=(S_IFREG | 0444), st_size=30) attr[‘st_ctime’] = attr[‘st_mtime’] = attr[‘st_atime’] = time() return attr
Так как по пути / расположена директория, а по пути /data — файл, при передаче этих путей требуется возвращать значительно отличающиеся друг от друга атрибуты. При этом в обоих случаях нужно возвращать значение прав доступа, которое формируется на основе флагов, импортированных из модуля stat , и числового значения, соответствующего правам доступа к файлу в Linux. Также в обоих случаях необходимо добавлять в словарь метки времени модификации и последнего доступа. В нашем случае эти метки времени не имеют особого значения, поэтому при установке их значений мы будем использовать текущее время.
Файловая структура проекта. Как указывать пути из html и css-файлов
Директория также должна содержать атрибут с количеством указывающих не нее жестких ссылок. В нашем случае у директории нет поддиректорий, поэтому их количество будет равно 2. Для файла также нужен атрибут с значением его размера в байтах. Здесь мы немного схитрим и установим неизменное значение 30, хотя и очевидно, что размер файла может изменяться и напрямую зависит от текущей даты.
Вторым необходимым нам методом является метод read . Он будет вызываться всегда, когда операционная система захочет прочитать содержимое файла. В случае нашей файловой системы можно будет прочитать содержимое единственного файла, поэтому нам придется лишь убедиться в том, что осуществляется чтение именно этого файла и вернуть строку с информацией о текущей дате:
def read(self, path, size, offset, fh): if path == ‘/date’: return datetime.datetime.now().strftime(«%B %d, %Y») + ‘n’
Последним интересующим нас методом является метод, который задействуется каждый раз, когда операционной системе требуется получить информацию о содержимом директории. И снова следует помнить о том, что в нашем распоряжении имеется лишь одна директория, поэтому нам достаточно просто вернуть список содержимого этой директории:
def readdir(self, path, fh): return [‘.’, ‘..’, ‘date’]
На этом реализацию нашего основного класса можно считать оконченной. Теперь мы можем приступить к созданию программы, которая будет задействовать этот класс, активируя тем самым нашу новую файловую систему:
from stat import S_IFDIR, S_IFREG from sys import argv, exit from time import time from fuse import FUSE, Operations, LoggingMixIn import datetime class Context(LoggingMixIn, Operations): #код, приведенный выше if __name__ == ‘__main__’: if len(argv) != 2: print(‘использование: %s ‘ % argv[0]) exit(1) fuse = FUSE(Context(), argv[1], foreground=True, ro=True)
В первом блоке осуществляется импорт всех необходимых модулей.
Строка if __name == ‘__main__:’ выглядит немного странно, но на самом деле это полезная синтаксическая конструкция языка Python для выделения кода, который может исполняться как при запуске приложения из командной строки, так и при вызове из других точек кода. Данное выражение возвращает значение True в том случае, если код был исполнен в результате запуска приложения. В данном случае оно позволяет осуществить активацию файловой системы в пространстве пользователя и тогда, когда мы осуществляем запуск программы, и тогда, когда мы подключаем данный файл исходного кода Python в качестве модуля к другому приложению. В последней строке кода для активации файловой системы используется импортированная функция FUSE . Первые два аргумента этой функции являются нашим новым классом и путем к точке монтирования файловой системы соответственно (этот путь передается с помощью аргумента интерфейса командной строки приложения и используется в момент активации файловой системы). Все остальные аргументы позволяют передать стандартные параметры файловой системы.
При наличии данного кода вы можете активировать созданную файловую систему, просто запустив приложение с интерфейсом командной строки. Привилегии, необходимые для ее активации могут отличаться в зависимости от используемого дистрибутива. Самым надежным способом тестирования приложения является его запуск от лица пользователя root. Вам придется открыть две терминальные сессии. В рамках первой терминальной сессии следует подготовить файловую систему с помощью следующих команд:
mkdir fuse-test sudo python fusedate.py fuse-test
После этого вы сможете перейти в новую файловую систему и прочитать из ее файла информацию о текущей дате в рамках второй терминальной сессии:
sudo bash cd fuse-test cat date
Этой информации вполне достаточно для реализации ваших собственных файловых систем. Очевидно, что наша файловая система является слишком ограниченной в плане возможностей, но базовый подход к реализации файловых систем в пространстве пользователя остается неизменным вне зависимости от количества их файлов и директорий.
Документация модуля fusepy является не совсем полной, поэтому при любой необходимости получения дополнительной информации о той или иной операции следует обращаться к документации основной версии FUSE, расположенной по адресу fuse.sourceforge.net.
Файловые системы в пространстве пользователя
Технология файловых систем в пространстве пользователя не предназначена для создания исключительно «игрушечных» файловых систем. Она на самом деле очень полезна, так как снижает барьер вхождения в процесс разработки и позволяет создавать свои собственные новые файловые системы даже не-разработчикам ядра Linux. Она также значительно упрощает распространение программных компонентов для поддержки новых файловых систем, так как разработчикам больше не приходится компилировать их в виде модулей ядра операционной системы. А это несколько реализаций файловых систем пространства пользователя, которые я предпочитаю использовать:
- SSHFS позволяет монтировать удаленные файловые системы с использованием исключительно протокола SSH без необходимости установки какого-либо дополнительного программного обеспечения на стороне сервера.
- EncFS позволяет создавать зашифрованные файловые системы для безопасного хранения ваших данных.
- Archivemount позволяет работать со сжатыми архивами таким же образом, как и с обычными директориями без необходимости их полной распаковки.
- Code Ninja: стандартные потоки ввода и вывода
- Code Ninja: Что такое указатели?
Источник: rus-linux.net
Создаем свою файловую систему в ОС Windows на .Net
Существует великое множество файловых систем. Это и файловые системы для носителей информации (FAT*, NTFS, ext* и т.д.), и сетевые файловые системы (NFS, CIFS и т.д.), и виртуальные файловые системы, и великое множество других. А появлялась ли у тебя, %habrauser%, потребность в своей, еще несуществующей файловой системе? О том, как ее сделать для ОС Windows на managed-коде (.net), и пойдет речь.
В общем случае, для создания своей файловой системы (далее ФС), необходимо написать драйвер этой ФС и зарегистрировать его в ОС. Т.к. драйвер взаимодействует с ядром ОС, то его создание на managed-коде является делом нетривиальным, а производительность такого драйвера будет на невысоком уровне. В связи с этим, целесообразнее иметь драйвер ФС, написанный на native-коде и некий промежуточный слой между этим драйвером и managed-кодом. Такой драйвер существует в проекте Dokan, равно как и набор классов DokanNet для взаимодействия с этим драйвером в managed-коде. Оба проекта распространяются под лицензией GPLv3.
Попробуем разобраться, как это работает
Dokan — это драйвер, работающий на уровне ядра Windows, с которым могут взаимодействовать любые приложения из userspace-а. Драйвер существует как для 32-ух разрядный систем, так и для 64-ех разрядных. Драйвер не несет в себе реализацию какой-либо ФС, а лишь выступает в роли прокси, пропуская через себя все операции ввода-вывода (IO) из ядра ОС в userspace.
Реализация функционала ФС лежит на наших плечах, мы создаем базовые функции ФС, такие как открытие/закрытие файла, чтение из файла, запись в файл и т.д., которые будут вызываться драйвером Dokan при возникновении в системе соответствующих событий. В момент регистрации нашей ФС в драйвере Dokan, мы указываем некоторые параметры работы нашей ФС (кол-во потоков-обработчиков операций ввода/вывода, точка монтирования нашей ФС (Dokan поддерживает монтирование в качестве съемного или сетевого диска и только в корень ФС), автоматическое размонтирование нашей ФС, в случае ошибок в работе, и некоторые другие параметры). После этого в ОС появляется новый диск в корне ФС, с которым любые приложения и сама ОС взаимодействует, как и с обычным диском. Какие операции разрешено производить в данной ФС, зависит только от разработчика этой ФС, то есть от нас.
- DokanNetMirror — ФС-зеркало уже существующего каталога
- RegistoryFS — ФС, представляющая структуру системного реестра Windows в директории и файлы
- CreateFile — создание файлов/директорий
- OpenDirectory — открытие директории
- CreateDirectory — создание директории
- Cleanup — удаление файла/пустой директории
- CloseFile — закрытие файлового дескриптора
- ReadFile — чтение куска файла указанной длины с указанным смещением
- WriteFile — запись данных в файл с указанным смещением
- FlushFileBuffers — очистка буферов (кэша) файла
- GetFileInformation — получение информации о размере, атрибутах, времени создания/последнего доступа/модификации файла/директории
- FindFiles — получение списка файлов/директорий в указанной директории
- SetFileAttributes — установка атрибутов файла/директории
- SetFileTime — установка времени создания/последнего доступа/модификации файла/директории
- DeleteFile — пометка файла на удаление (удаление проводится в Cleanup)
- DeleteDirectory — пометка директории на удаление (удаление проводится в Cleanup)
- MoveFile — перемещение/переименование файла/директории
- SetEndOfFile — установка размера файла (используется при создании пустого файла определенной длины)
- SetAllocationSize — автор не указал для чего необходима данная фун-ция, на практике передача управления в нее не замечена
- LockFile — блокировка файла в single-доступе
- UnlockFile — снятие блокировки
- GetDiskFreeSpace — получение информации о кол-ве доступного/общего/свободного места в ФС
- Unmount — размонтирование/отключение ФС
Как мы видим, функционал, предоставляемый драйвером Dokan и оберткой DokanNet очень богат. На базе данного проекта разработана ФС SSHFS. Каждый может разработать ФС, отвечающий своим требованиям. Я же остановился на разработке HttpFS, которая позволит монтировать в систему файлы, находящиеся на удаленных Http-серверах. Но об этом в следующей статье…
- Dokan
- DokanNet
- виртуальная файловая система
- файловая система
- .Net
Источник: habr.com
Дерево файлов
Дерево файлов — графическое представление файловой системы в виде разветвляющегося сверху-вниз «дерева» папок и файлов на электронном носителе. Бывают случаи, когда нам нужно получить такое дерево в виде текстового списка, чтобы переслать его кому-то, например, через файловый сервер. Вручную копировать все имена файлов очень накладно, а стандартных средств для этого Windows не предоставляет. В таком случае выручит специальная программа, представленная на данной странице. Она легко построит дерево файлов из любой папки и сохранит в одном из нескольких форматов.
NikFileTree 1.8
0.6 МБ (портативная версия)
Windows 98/ME/NT/2000/XP/Vista/7 32-bit
Программа строит дерево файлов в каталогах и сохраняет его в текстовом файле. Вид результата — дерево, плоский список или HTML-страница. Коллекционеры бывают разные. Одни собирают марки, другие — антиквариат, а третьи, например, музыку или фильмы. Главное, чтобы всю свою коллекцию можно было кому-то продемонстрировать, чтобы показать, какой Вы коллекционер.
Для марок создаются альбомы, для предметов старины иной раз оборудуют целые комнаты, а вот с современными информационными коллекциями дело обстоит потуже. Можно, конечно, все записать на диски, а потом рассортировать их по полкам и по жанрам, чтобы быстрее находить.
Но, с ростом места на современных жестких дисках, многие отказываются от такого способа хранения, отводя под свое мультимедийное добро сотни гигабайт пространства. Если учесть, что среднего качества фильм, скачанный из Интернета, весит около 1 гигабайта, то получается, что на 1-терабайтном жестком диске можно смело выделить место под 500 таких фильмецов! Ну, чем не коллекция?
Однако упомнить, что где лежит не всегда можно. Для того чтобы не возникало проблем с поиском, хорошо было бы создать список (и желательно бумажный) всех фильмов/музыки/других файлов, где бы значился каталог, в котором их искать и имя. Можно, конечно, завести амбарную книгу, дабы вписывать туда все новозагруженные файлы, но на такую перепись времени уйдет мама не горюй :). Сегодня мы научимся создавать списки любых файлов на жестком диске за считанные минуты. Для этого нам понадобится программа NikFileTree. Вот то, что имеется в ее арсенале:
Возможности NikFileTree
- поиск файлов и распечатка (сохранение) результатов поиска;
- различные виды результата — дерево, плоский список или HTML-отчет;
- фильтр на файлы по нескольким маскам сразу и возможность не выводить в результат пустые папки;
- работа как с локальными дисками (C: и т.п.), так и с сетевыми ресурсами (\servershare);
- для плоского списка и HTML-отчета предусмотрен настраиваемый вывод размеров файлов (и папок!), времени создания и модификации, атрибутов;
- сортировка по названию, размеру, времени создания или модификации;
- интеграция c Проводником (локальное меню для дисков и папок);
- DOS и Windows кодировки результата.
Ко всем плюсам можно добавить то, что NikFileTree не требует установки, а соответственно может использоваться прямо со съемного носителя (флэшки, диска и т.д.). Таким образом, Вы можете придти к знакомому и легко распечатать весь список его фильмов, чтобы, изучив его, скачать себе то, что нужно.
И от «трепологии» к практике :). Для начала скачаем архив с программой и распакуем его в нужную папку. Теперь можно запускать:
Перед нами главное окно программы. Оно состоит из четырех вкладок со всевозможными настройками, хотя для создания простого списка, можно использовать только вкладку «Главные».
Рассмотрим алгоритм создания дерева файлов.
Пример работы с программой
Допустим, мы хотим создать список фильмов с расширением AVI, которые можно записать на диск и просматривать потом на DVD-плеере. Нет ничего проще: указываем папку, из которой требуется произвести выборку, в окошке «Маска файлов» указываем расширение имени AVI, «Вид результата» пусть будет «Дерево».
Файл-результат по умолчанию создается в той же папке, которая и сканируется, но при желании можно выбрать любую. Осталось только нажать кнопку «Построить дерево» и немного подождать. Для просмотра сгенерированного списка можно всего лишь нажать «Открыть результат» и Вы увидите перечень всех нужных файлов.
Теперь о разнице вариантов создания списков файлов. Дерево файлов Вы можете видеть на предыдущем скриншоте. Плоский список отличается лишь тем, что в нем вы не увидите структуры папок — все папки идут по порядку вместе с помещенными в них файлами.
Хотя плоский список и не очень наглядный, но он имеет ряд преимуществ. Это меньший размер итогового файла и большое количество настроек, которые мы сейчас рассмотрим.
Дополнительные возможности
Переходим на вкладку «Дополнительно».
Здесь находятся дополнительные параметры, которые касаются построения списков файлов. Здесь можно задать способ сортировки файлов, информацию, которая будет характеризовать файлы, параметры датирования файлов и многое другое. Добавлю лишь то, что все возможности данной вкладки доступны только для плоского списка. В остальных же вариантах некоторые пункты будут недоступны.
Хоть для HTML и недоступны многие параметры из предыдущей вкладки, зато имеется отдельная, которая работает только с HTML-списком.
Параметров здесь немного. Мы можем задать заголовок для нашего списка, отметить (или не отмечать) стартовую папку, а также выбрать файл стиля страницы. Последнее, пожалуй — самое интересное.
По умолчанию в папке с программой есть всего один файл стилей — NikFileTree.css, но мы можем на его основе создать стиль с любыми параметрами на наш выбор. Для этого Вам будет достаточно элементарных знаний о каскадных таблицах стилей HTML и/или знания английского языка (в случае с «или» не повредит развитая интуиция :)).
Открываем файл стиля в текстовом редакторе и меняем цвет, размер, фон и все, что пожелаете :). А вот так довольно симпатично выглядит список со стандартным стилем:
Настройки NikFileTree
И вот мы добрались до последней вкладки, именуемой «Проводником»:
Здесь всего две кнопки, которые помогают интегрировать NikFileTree в Проводник Windows или удалить его. Зачем это? Чтобы не надо было искать программу, всякий раз, когда требуется создать список файлов каталога.
Если Вы внедрили NikFileTree в Проводник, то чтобы добраться до него следует вызвать меню «Файл» и выбрать пункт с именем текущей папки. Теперь в выпавшем списке Вы без труда отыщете пункт, который отвечает за запуск программы.
Понравилось также, что есть возможность удалиться из Проводника без каких либо последствий и следов в реестре. И вообще NikFileTree оставляет о себе неплохое впечатление. Единственное, что подкачало, так это отсутствие в HTML-списке ссылок на папки и файлы. Чтобы можно было один раз кликнуть на нужном файлике и он открывался.
Эту оплошность автор программы обещает исправить в следующем релизе NikFileTree. Так что ждем, а пока ждем, создаем свои списки теми инструментами, которые имеем. А имеем мы многое ;)…
P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.
P.P.S. Есть возможность создавать HTML-списки файлов со ссылками при помощи браузера Opera. Правда она создает только плоский список только содержимого каталога без углубления в подпапки, но, может, кому и пригодится :).
Браузер Опера https://www.bestfree.ru/soft/inet/opera-browser.php
Для создания списка файлов введите в адресную строку браузера адрес интересующей папки и нажмите Enter. Сохранить список можно при помощи меню «Файл» — «Сохранить как».
Источник: www.bestfree.ru