Напишите мой собственный интерфейс «все это файл» - PullRequest
10 голосов
/ 15 января 2010

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

Ответы [ 3 ]

10 голосов
/ 15 января 2010

В Linux взгляните на Предохранитель : реализовать полнофункциональную файловую систему в программе для пользователя.

  • Простой библиотечный API
  • Простая установка (не нужно исправлять или перекомпилировать ядро)
  • Безопасная реализация
  • Userspace - интерфейс ядра очень эффективен
  • Используется непривилегированными пользователями
  • Работает на ядрах Linux 2.4.X и 2.6.X
  • оказался очень стабильным с течением времени

Посмотрите на совместимые платформы здесь . С точки зрения учебника, один из хороших, с которыми я столкнулся, это здесь .

4 голосов
/ 15 января 2010

В дополнение к FUSE, другим решением является экспорт файловой системы 9p . wmii делает это, например.

1 голос
/ 15 января 2010

Возможно, способ сделать это - просто использовать «настоящие» файлы и использовать библиотеку уведомлений об изменениях (предпочтительно inotify), чтобы определить, когда они изменяются, и соответственно обновить ваше поведение.

/ proc и / sys предназначены для взаимодействия с ядром и пользователем и не предназначены для IPC программ пользовательского пространства - для этого вы должны использовать именованные каналы, сокеты, разделяемую память и т. Д.

(ab) использование FUSE не очень хорошая идея в этом случае, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...