Επόμενο Περιεχόμενα
Στο linux υπάρχει ένα σύστημα αρχείων, το proc, το οποίο
προσαρτάται συνήθως στο /proc στο δένδρο
καταλόγων, και το οποίο είναι εικονικό. Αυτό που δηλαδή
φαίνεται ως αρχεία, στην πραγματικότητα δεν υπάρχει
πουθενά στο δίσκο ή στην μνήμη του υπολογιστή. Στην
πραγματικότητα, τα φαινομενικά αρχεία είναι απλές
"εγγραφές" στο δένδρο καταλόγων που αντιστοιχούν το
διάβασμα, γράψιμο κ.λ.π των "αρχείων" αυτών σε κλήσεις
διαφόρων συναρτήσεων. Έτσι, όταν διαβάζει κάποιος το
αρχείο π.χ. /proc/interrupts δεν διαβάζει τα περιεχόμενα
ενός υπαρκτού αρχείου, αλλά απλώς την έξοδο μιας
συνάρτησης που καλείται κάθε φορά που το αρχείο αυτό
διαβάζεται.
Το εικονικό σύστημα αρχείων proc, χρησιμοποιείται κυρίως
για την αναφορά πληροφοριών (δυναμικά) του συστήματος.
Μπορεί δε να αλλάξει δυναμικά, δηλαδή να προστεθούν και
να αφαιρεθούν αρχεία και κατάλογοι, ανάλογα με την
τρέχουσα κατάσταση του συστήματος.
Ο προγραμματισμός του συστήματος αρχείων proc στον
πυρήνα, προσφέρει ένα υπάρχον σύνολο συναρτήσεων
(ελληνιστί API), που καθιστούν την επέμβαση στο proc και
την προσθαφαίρεση αρχείων σχετικά εύκολη. Για να
προσθέσουμε ένα αρχείο στο proc, χρησιμοποιούμε τη
συνάρτηση proc_register(), η οποία παίρνει ως όρισμα μια
δομή που περιγράφει το αρχείο (όνομα, μέγεθος, ιδιότητες,
κ.λ.π.), καθώς και τις συνδεδεμένες με το αρχείο
συναρτήσεις. Επιπλέον, δίνεται η - πολύ χρήσιμη -
δυνατότητα να περάσουμε ένα δείκτη, ο οποίος θα περαστεί
ως παράμετρος στην συνάρτηση που κάθε φορά καλείται. Με
αυτό τον τρόπο, μπορούμε να γράψουμε μια φορά τις
συναρτήσεις που καλύπτουν πολλά "ίδια" αρχεία του proc.
Για παράδειγμα, προφανώς δεν χρειάζεται να γραφούν
ξεχωριστές συναρτήσεις για το αρχείο /proc/parport/0/irq
και /proc/parport/1/irq, αλλά οι ίδιες συναρτήσεις
καλούνται με διαφορετικό όρισμα. Ο τρόπος για να γίνει
αυτό, είναι ένας δείκτης void *, ο οποίος "συνδέεται" με
κάθε αρχείο, και "κουβαλάει" ό,τι αυτό χρειάζεται.
Επόμενο Περιεχόμενα