2010-01-14 4 views
10

Tôi muốn hiển thị các cài đặt và thống kê của chương trình theo cách 'tất cả mọi thứ là một tệp' - cách thức/proc/và/sys/works.Viết giao diện 'mọi thứ là một tệp' của riêng tôi

Ví dụ, hãy tưởng tượng một khoảnh khắc mà apache2 có loại giao diện này. Sau đó, bạn sẽ có thể làm điều gì đó như thế này (giả thuyết):

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 

Bây giờ, có hướng dẫn nào hoặc tương tự về cách thực hiện việc này không? Tôi chủ yếu tìm kiếm các kỹ thuật cho 'giả vờ là một tập tin hoặc thư mục'. Tôi đang trên Linux, POSIX hoặc phương pháp di động khác sẽ là thích hợp hơn, nhưng không bắt buộc.

+3

Trên Linux, bạn có thể cần xem xét Fuse (http://fuse.sourceforge.net/) – jldupont

Trả lời

10

Trên Linux, hãy xem Fuse: triển khai hệ thống tệp đầy đủ chức năng trong chương trình không gian người dùng.

  • đơn giản thư viện API
  • đơn giản cài đặt (không cần phải vá hoặc biên dịch lại kernel)
  • thực hiện an toàn
  • Userspace - giao diện hạt nhân là rất hiệu quả
  • Có thể sử dụng bởi người dùng không có đặc quyền
  • Chạy trên hạt nhân Linux 2.4.X và 2.6.X
  • Đã được chứng minh rất ổn định theo thời gian

Nhìn vào nền tảng tương thích here. Trong điều khoản của hướng dẫn, một trong những cái tốt tôi đã đi qua là here.

+0

cảm ơn bạn, có vẻ tốt. –

4

Ngoài FUSE, giải pháp khác là xuất hệ thống tệp 9p. Ví dụ: wmii thực hiện điều này.

+2

Đó là một ý tưởng tuyệt vời. Đọc trên Plan9 thực sự là lý do tại sao tôi có ý tưởng này bắt đầu anyway. –

+0

Nếu bạn muốn đi tuyến đường 9p, hãy xem http://kyuba.org/libduat - thư viện để triển khai hệ thống tệp 9p. – camh

+0

Cảm ơn. Tôi cũng chỉ phát hiện ra rằng debian có một gói 9mount để gắn các v9fs. –

1

Có lẽ cách để làm điều này chỉ là sử dụng các tệp "thực" và sử dụng thư viện thông báo thay đổi (ưu tiên inotify) để phát hiện khi chúng thay đổi và cập nhật hành vi của bạn cho phù hợp.

/proc và/sys dành cho giao tiếp người dùng hạt nhân và không thực sự dành cho IPC của chương trình không gian người dùng - bạn dự kiến ​​sẽ sử dụng các đường ống, ổ cắm, bộ nhớ chia sẻ v.v.

(ab) sử dụng FUSE không thực sự là một ý tưởng hay trong trường hợp này, tôi nghĩ vậy.

+0

Tôi mong đợi rất nhiều tương tác với các chương trình khác, và trong trường hợp này nó phù hợp với hóa đơn tốt. Tôi cũng tò mò và muốn học cách làm điều này. –

+0

Và một lý do khác tại sao tôi muốn làm điều này là bởi vì tôi chán với việc có rất nhiều giao diện giám sát khác nhau cho các chương trình khác nhau, và tôi bắt đầu thực hiện lập trường rằng điều này thực sự thuộc về FS. –