Напишите мой собственный интерфейс "все в файле"

Я хотел бы показать настройки и статистику моей программы в манере "все как файл" - вроде как/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, на самом деле это не очень хорошая идея.