Напишите мой собственный интерфейс "все в файле"
Я хотел бы показать настройки и статистику моей программы в манере "все как файл" - вроде как/proc/и/sys/работает.
В качестве примера предположим, что apache2 имел этот тип интерфейса. Тогда вы могли бы сделать что-то вроде этого (гипотетическое):
cd /apache2/virtual_hosts
mkdir 172.20.30.50
cd 172.20.30.50
echo '/www/example1' > DocumentRoot
echo 'www.example1.com' > ServerName
echo 1 > control/enabled
cat control/status
enabled true
uptime 4080
hits 0
Теперь, есть ли какие-либо учебные пособия или что-то подобное о том, как это сделать? Я в основном ищу методы для "притворяясь файлом или файлом". Я на Linux, POSIX или другой более портативный метод был бы предпочтительнее, но не требовался.
Ответы
Ответ 1
В Linux обратите внимание на Fuse: реализовать полностью функциональную файловую систему в программе пользовательского пространства.
- API простой библиотеки
- Простая установка (нет необходимости исправлять или перекомпилировать ядро)
- Безопасная реализация
- Пользовательское пространство - интерфейс ядра очень эффективен
- Использование не привилегированными пользователями
- Работает на ядрах Linux 2.4.X и 2.6.X
- Со временем оказалось очень стабильным
Посмотрите на совместимые платформы здесь. В терминах учебника один из хороших, с которыми я столкнулся, - здесь.
Ответ 2
В дополнение к FUSE другим решением является экспорт файловой системы 9p. wmii делает это, например.
Ответ 3
Возможно, способ сделать это - просто использовать "реальные" файлы и использовать библиотеку уведомлений об изменениях (предпочтительно использовать inotify) для обнаружения, когда они меняются и соответственно обновляют ваше поведение.
/proc и /sys предназначены для обмена данными с ядром и не предназначены для IPC для программ пользовательского пространства. Вы должны использовать именованные каналы, сокеты, разделяемую память и т.д.
(ab), используя FUSE, на самом деле это не очень хорошая идея.