Λειτουργικά συστήματα

Γνώση Υπολογιστών >> Λειτουργικά συστήματα >  >> Unix

Τι ονομάζεται και ανώνυμος σωλήνας στο UNIX;

Στα συστήματα τύπου UNIX, οι σωλήνες είναι ένας μηχανισμός για την επικοινωνία μεταξύ της επεξεργασίας (IPC). Επιτρέπουν σε μία διαδικασία να στείλει δεδομένα σε άλλη διαδικασία. Υπάρχουν δύο κύριοι τύποι:ονομάζονται σωλήνες (που ονομάζονται επίσης FIFOs) και ανώνυμοι σωλήνες (που ονομάζονται επίσης ανώνυμοι σωλήνες).

Ανώνυμοι σωλήνες (ανώνυμοι σωλήνες):

* Δημιουργία: Δημιουργήθηκε χρησιμοποιώντας την κλήση συστήματος `pipe ()`. Αυτή η κλήση δημιουργεί ένα μονόδρομο σωλήνα που αποτελείται από δύο περιγραφείς αρχείων:ένα για ανάγνωση (`fd [0]`) και ένα για γραφή (`fd [1]`).

* Πρόσβαση: Μόνο η διαδικασία που δημιούργησε το σωλήνα μπορεί να έχει πρόσβαση σε αυτό. Η ύπαρξη του σωλήνα δεν είναι γνωστή εκτός του πλαισίου της διαδικασίας δημιουργίας. Συνήθως χρησιμοποιείται για επικοινωνία μεταξύ μιας γονικής και παιδικής διαδικασίας ή μεταξύ δύο διαδικασιών που συνδέονται ρητά.

* Lifetime: Ο σωλήνας υπάρχει μόνο για τη διάρκεια ζωής των διαδικασιών που το χρησιμοποιούν. Όταν κάθε διαδικασία κλείνει το τέλος του, ο σωλήνας καταστρέφεται αυτόματα και τυχόν περαιτέρω προσπάθειες ανάγνωσης ή εγγραφής θα αποτύχουν.

* Παράδειγμα (χρησιμοποιώντας `fork ()` και `pipe ()`):

`` `c

#include

#include

#include

#include

int main () {

int fd [2]; // Περιγραφείς αρχείων για το σωλήνα

PID_T PID;

αν (σωλήνας (fd) ==-1) {

perror ("ο σωλήνας απέτυχε")?

έξοδος (1);

}

pid =πιρούνι ();

αν (pid <0) {

Perror ("Fork απέτυχε")?

έξοδος (1);

} else αν (pid ==0) {//

Κλείσιμο (FD [1]); // Κλείστε το τέλος εγγραφής

buffer char [100];

Διαβάστε (FD [0], Buffer, Sizeof (buffer));

printf ("Το παιδί έλαβε:%s \ n", buffer);

Κλείσιμο (FD [0]);

} else {// γονική διαδικασία

Κλείσιμο (FD [0]); // Κλείστε το τέλος ανάγνωσης

const char* message ="Γεια σας από τον γονέα!";

γράψτε (fd [1], μήνυμα, strlen (μήνυμα) + 1); // +1 για μηδενικό τερματικό

Κλείσιμο (FD [1]);

Περιμένετε (NULL); // Περιμένετε να τελειώσει το παιδί

}

επιστροφή 0;

}

`` `

Ονομάζονται σωλήνες (FIFOS):

* Δημιουργία: Δημιουργήθηκε χρησιμοποιώντας την κλήση συστήματος `mkfifo ()`. Αυτό δημιουργεί ένα αρχείο στο σύστημα αρχείων που αντιπροσωπεύει τον σωλήνα. Το όνομα του αρχείου λειτουργεί ως αναγνωριστικό για το σωλήνα.

* Πρόσβαση: Πολλαπλές διαδικασίες μπορούν να έχουν πρόσβαση σε έναν σωλήνα που ονομάζεται. Οποιαδήποτε διαδικασία γνωρίζει ότι η διαδρομή του σωλήνα μπορεί να την ανοίξει για ανάγνωση ή γραφή (αν και μόνο μία διαδικασία μπορεί να γράψει κάθε φορά, εκτός εάν χρησιμοποιεί ειδικές διαμορφώσεις). Επιβιώνουν πέρα από τη ζωή των διαδικασιών που τις χρησιμοποιούν.

* Lifetime: Ο σωλήνας παραμένει στο σύστημα αρχείων μέχρι να διαγραφεί ρητά χρησιμοποιώντας το `relink ()`.

* Παράδειγμα (χρησιμοποιώντας δύο ξεχωριστά προγράμματα που επικοινωνούν μέσω ενός ονόματος σωλήνα):

Θα χρειαζόσασταν δύο προγράμματα:ένα για να γράψετε στο FIFO και ένα άλλο για να διαβάσετε από αυτό. `mkfifo ()` Ονομάζεται μία φορά (ίσως σε ένα σενάριο εγκατάστασης) για να δημιουργήσει το FIFO, τότε τα προγράμματα `open ()` το fifo για ανάγνωση/εγγραφή. Οι διαδικασίες πρέπει να χειρίζονται σφάλματα, συμπεριλαμβανομένης της πιθανότητας του FIFO να μην υπάρχουν και σφάλματα στο `open ()`.

Οι βασικές διαφορές συνοψίζονται:

| Χαρακτηριστικό | Ανώνυμος σωλήνας | Ονομάστηκε σωλήνας (FIFO)

| -----------------------------------------------------------------------------------------------------------------------------------------------------------------

| Δημιουργία | `pipe ()` | `mkfifo ()` |

| Πρόσβαση | Δημιουργία μόνο διαδικασίας | Πολλαπλές διαδικασίες |

| Επιμονή | Υπάρχει μόνο κατά τη διάρκεια της διαδικασίας ζωής | Επιμένει στο σύστημα αρχείων |

| Διακοπή | Συνήθως οι διαδικασίες γονέων-παιδιών ή ρητά συνδεδεμένες Μπορεί να συνδέσει μη σχετικές διαδικασίες |

| Εισαγωγή συστήματος αρχείων | Όχι | Ναι |

Οι ονομαζόμενοι σωλήνες είναι πιο ευέλικτοι για την επικοινωνία μεταξύ των μη σχετιζόμενων διαδικασιών, ενώ οι ανώνυμοι σωλήνες είναι απλούστεροι και πιο αποτελεσματικοί για την επικοινωνία μεταξύ στενά συνδεδεμένων διαδικασιών όπως ο γονέας και το παιδί του. Η επιλογή εξαρτάται από τις συγκεκριμένες ανάγκες επικοινωνίας της αίτησής σας.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα