Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο lpis.csd.auth.gr/curriculum/C+Unix/UNCL202.html Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο Διδάσκοντες Ν. Βασιλειάδης, Επίκουρος Καθηγητής (θεωρία) Δ. Βράκας, Μεταδιδάκτορας (εργαστήριο)
Δομή του Μαθήματος Εισαγωγή στο Unix Σύντομη επανάληψη της Γλώσσας C (δείκτες, δομές) Δυναμικές δομές δεδομένων Είσοδος/έξοδος σε αρχεία (υψηλού – χαμηλού επιπέδου) Αλληλεπίδραση με Unix Προγραμματισμός κελύφους Unix Ανάπτυξη εφαρμογών σε C
Εισαγωγή στο Unix Γλώσσα C & Unix
Ιστορική Αναδρομή (1/3) Multics UNICS (Kernigham) Τέλη ‘60 Ινστιτούτο ΜΙΤ της Βοστόνης, εργαστήρα AT&T Bell labs, General Electrics UNICS (Kernigham) 1969 Thompson (Multics), Ritchie, Canaday Απλό λειτουργικό σύστημα για τον PDP-7 Για να εκτελείται με χαμηλό κόστος ένα παιχνίδι με όνομα Space Travel 1 χρόνο αργότερα μετονομάστηκε σε UNIX
Ιστορική Αναδρομή (2/3) Τo UNIX εξελίχθηκε ραγδαία τη δεκαετία του 1970 Η σημαντικότερη στιγμή του είναι το 1979 με την κυκλοφορία της 7ης έκδοσης, που θεωρείται ο άμεσος πρόγονος των σύγχρονων συστημάτων UNIX.
Ιστορική Αναδρομή (3/3) Αρκετές εταιρίες το υιοθέτησαν και ανέπτυξαν τις δικές τους εκδόσεις. Sun Microsystems, Microsoft Στα τέλη του 1980, η AT&T Bell labs η Sun Microsystems και η Microsoft ανέπτυξαν την 4η έκδοση του UNIX System V. Δημιουργία άλλων συμμαχιών για να ανταγωνιστούν το System V και την επικράτηση στην αγορά. Τελικά όλοι συμφώνησαν στην ανάπτυξη ενός κοινού πυρήνα Κάθε εταιρία θα μπορούσε να προσθέτει επιπλέον χαρακτηριστικά στις δικές τις εκδόσεις
Εκδόσεις του UNIX (1/2) Linux Solaris SCO Unix: Santa Cruz Operation Αρχικά μόνο για PC (όχι μόνο πλέον) ιδιαίτερα δημοφιλής γιατί διανέμεται δωρεάν υπάρχει μεγάλη κοινότητα από προγραμματιστές που συνεχώς το επεκτείνουν και εκδίδουν νέες εκδόσεις και εφαρμογές. Solaris Μετεξέλιξη του SunOS από την εταιρεία Sun Microsystems η οποία κατέχει ένα μεγάλο μέρος στην αγορά σταθμών εργασίας (workstation) SCO Unix: Santa Cruz Operation Βασίστηκε στο System V/386 για τον επεξεργαστή 80386 της Intel.
Εκδόσεις του UNIX (2/2) IRIX: Silicon Graphics HP-UX: Hewlett Packard True64 Unix: Compaq DEC ΑΙΧ: IBM A/UX: Apple
Το UNIX Σήμερα Ισχυρό, εύκαμπτο και προπάντων σταθερό λειτουργικό σύστημα Χρησιμοποιείται από περίπου 20 εκατομμύρια υπολογιστές και 100 εκατομμύρια χρήστες σε ολόκληρο τον κόσμο.
Παράγοντες Επιτυχίας Σταθερότητα - αξιοπιστία Ελεύθερη διακίνηση του πηγαίου κώδικα και όχι μόνο των εκτελέσιμων Μεγάλος αριθμός από utilities και προγράμματα που αναπτύχθηκαν από τρίτους Δυνατότητες multitasking και multiuser Εξαιρετικές δυνατότητες για δικτύωση υπολογιστών Η μεταφερσιμότητα (portability) του, που οφείλεται στο γεγονός ότι το UNIX είναι εξ’ ολοκλήρου γραμμένο σε γλώσσα προγραμματισμού C και επομένως μπορεί πολύ εύκολα να κυκλοφορήσει έκδοση για οποιαδήποτε πλατφόρμα διαθέτει μεταγλωττιστή της γλώσσας C.
Σύντομη Ιστορία της C (1/5) Αναπτύχθηκε το 1969 - 1973 στα Bell Laboratories (Lucent Technologies) από τον Dennis Ritchie. Είναι στενά συνδεδεμένη με το λειτουργικό σύστημα Unix όπου και αναπτύχθηκε, αφού τόσο το σύστημα όσο και τα περισσότερα προγράμματα που τρέχουν σ’ αυτό είναι γραμμένα σε C.
Σύντομη Ιστορία της C (2/5) Προέρχεται έμμεσα από την γλώσσα BCPL, η οποία οδήγησε αρχικά σε μια άλλη γλώσσα την B. Η γλώσσα B χρησιμοποιήθηκε το 1969 για την συγγραφή του πρώτου συστήματος Unix στον υπολογιστή DEC PDP-7. Πάνω σε αυτήν βασίστηκε ο Ritchie για τη δημιουργία της C.
Σύντομη Ιστορία της C (3/5) Κάποιες αλλαγές έγιναν 1977 - 1979, κατά την επίδειξη της ανεξαρτησίας του συστήματος Unix από αρχιτεκτονικές υπολογιστών. Τότε εμφανίστηκε η πρώτη ευρέως διαθέσιμη περιγραφή της γλώσσας Η αύξηση της δημοτικότητας των PC εκείνη την περίοδο οδήγησε στην διάδοση της γλώσσας και την εμφάνιση πολλών εφαρμογών αλλά και εκδόσεων της γλώσσας που δεν ήταν απόλυτα συμβατές μεταξύ τους.
Σύντομη Ιστορία της C (4/5) Tο 1983 συστάθηκε η επιτροπή ANSI X3J11 με σκοπό την προτυποποίηση της C Πραγματοποιήθηκε το 1989 επιφέροντας μερικές επιπλέον αλλαγές στη γλώσσα. Το πρότυπο ANSI C επέτρεψε τη δημιουργία μεταγλωττιστών ικανών να χειρίζονται το ίδιο σωστά όλα τα προγράμματα γραμμένα σε ANSI C
Σύντομη Ιστορία της C (5/5) Με την έλευση του αντικειμενοστρα-φούς προγραμματισμού δημιουρ-γήθηκε και η επέκταση της C με υποστήριξη αντικειμένων, η C++. Σήμερα η C++ είναι μια από τις πιο διαδεδομένες γλώσσες ενσωματω-μένη σε ολοκληρωμένα εργαλεία ανάπτυξης εφαρμογών, Π.χ. C++ Builder, Visual C++
Έννοια multi-tasking Multi-tasking θεωρούνται τα Λειτουργικά Συστήματα στα οποία ο χρήστης έχει τη δυνατότητα της παράλληλης εκτέλεσης πολλών διεργασιών Οι χρονοβόρες διεργασίες δεν αναγκάζουν τον χρήστη να περιμένει την περάτωση τους σε περίπτωση που προκύψει κάτι επείγον Η πολλαπλή εκτέλεση διεργασιών υλοποιείται με την τεχνική διαμοιρασμού-χρόνου (time-sharing). Οι διεργασίες εκτελούνται κυκλικά για ένα μικρό προκαθορισμένο χρονικό διάστημα, μέχρι να περατωθούν.
Έννοια multi-user Multi-User Λειτουργικά Συστήματα ονομάζονται αυτά, που υποστηρίζουν πολλαπλούς χρήστες, οι οποίοι μπορούν να εργάζονται ταυτόχρονα.
Επιθυμητές ιδιότητες Διαμόρφωση του περιβάλλοντος εργασίας για κάθε χρήστη ξεχωριστά Ασφάλεια (privacy) των ιδιωτικών δεδομένων Μεταφερσιμότητα (portability) Ο χρήστης δουλεύει στο ίδιο περιβάλλον και έχει πρόσβαση στα αρχεία του, με τον ίδιο τρόπο ανεξάρτητα από τον Η/Υ στον οποίο εργάζεται. Επικοινωνία μεταξύ των χρηστών του συστήματος Ανταλλαγής δεδομένων μεταξύ των χρηστών Οικονομία Κοινή χρήση διαθέσιμου λογισμικού και υλικού (εκτυπωτές, σαρωτές κ.τ.λ.) από πολλούς χρήστες.
Υλοποίηση multi-user στο UNIX Λογαριασμοί (accounts) Οι λογαριασμοί ξεχωρίζουν μεταξύ τους με τα login names (ή user names). Password Κατάλογος στο Σύστημα Αρχείων του Λειτουργικού Συστήματος (home directory) Eπιτυχής είσοδος (log on) Το UNIX «διαβάζει» ορισμένα αρχεία που βρίσκονται στον προσωπικό του κατάλογο ώστε να προσαρμόσει το περιβάλλον εργασίας στις ανάγκες του χρήστη.
Administrator Ο λογαριασμός του Διαχειριστή του Συστήματος (Administrator ή root) έχει απεριόριστες δυνατότητες στο σύστημα Δυνατότητα δημιουργίας και κατάργησης άλλων λογαριασμών
Η Δομή του UNIX
Πυρήνας (kernel) Το τμήμα που αλληλεπιδρά άμεσα με το υλικό (hardware) του συστήματος. Επικοινωνεί με όλες τις συσκευές του υπολογιστή Παρέχει στο κέλυφος ένα σύνολο από απλές εντολές π.χ. άνοιξε αρχείο Το κέλυφος δεν χρειάζεται να γνωρίζει λεπτομέρειες για το συγκεκριμένο υλικό.
Κέλυφος (shell) Παίζει το ρόλο του διαμεσολαβητή ανάμεσα στον πυρήνα και στο χρήστη ή στις εφαρμογές Ο χρήστης πληκτρολογεί εντολές στο κέλυφος Αυτό είναι υπεύθυνο για την μετάφραση και την προώθηση τους σε κατάλληλη μορφή στον πυρήνα. Το κέλυφος υπάρχει γιατί οι εντολές που χρησιμοποιεί ο πυρήνας είναι χαμηλού επιπέδου Θα ήταν ιδιαίτερα δύσκολο και άβολο για τον χρήστη να εργάζεται με αυτές.
Εφαρμογές (applications) Απλά: π.χ. αριθμομηχανή (calculator) Σύνθετα: π.χ. πρόγραμμα μηχανοργάνωσης μιας επιχείρησης Οι εφαρμογές επικοινωνούν με το κέλυφος για να διαβιβάσουν σε αυτό τις κατάλληλες εντολές.
Σύστημα Αρχείων (File System) Το σύστημα αρχείων του UNIX αποτελεί μια λογική μέθοδο οργάνωσης, αποθήκευσης, αναζήτησης και διαχείρισης δεδομένων. Τα αρχεία είναι δομημένα σε μια ιεραρχία από καταλόγους για εύκολη αναζήτηση. H έννοια του αρχείου είναι διευρυμένη Σαν αρχεία αντιμετωπίζονται όλα τα συστατικά του συστήματος, ακόμη και οι υλικές συσκευές, όπως οι εκτυπωτές και οι σκληροί δίσκοι.
Case sensitiveness Στο UNIX οι χαρακτήρες που αντιστοιχούν στα πεζά γράμματα θεωρούνται διαφορετικοί από τους αντίστοιχους των κεφαλαίων γραμμάτων input.txt, INPUT.TXT, Input.txt, input.TXT
Τύποι Αρχείων Κανονικά αρχεία (Ordinary files) Σύνδεσμοι (links) ή hard links Συμβολικοί σύνδεσμοι ή soft links Κατάλογοι (Directories) Ειδικά αρχεία (special files)
Σύνδεσμοι (links) ή hard links Παρέχουν τη δυνατότητα ύπαρξης πολλαπλών αντιγράφων ενός αρχείου σε διαφορετικούς υποκαταλόγους του ίδιου φυσικού μέσου. Τα αντίγραφα υλοποιούνται μόνο σε λογικό επίπεδο. Δεν δημιουργούνται πραγματικά αντίγραφα απλά σύνδεσμοι που ανακατευθύνουν οποιαδήποτε εντολή πάνω στον σύνδεσμο στο πραγματικό αρχείο.
Συμβολικοί σύνδεσμοι ή soft links Σύνδεσμοι οι οποίοι μπορούν να αναφέρονται και σε υποκαταλόγους αλλά και σε αρχεία διαφορετικών φυσικών μέσων αποθήκευσης Μπορούν να αναφέρονται και σε αρχεία που βρίσκονται σε διαφορετικούς Η/Υ στο τοπικό δίκτυο ή ακόμη και σε απομακρυσμένα δίκτυα (π.χ μέσω του Διαδικτύου).
Κατάλογοι (Directories) Αρχεία, τα οποία τα χειρίζεται διαφορετικά το λειτουργικό σύστημα Περιέχουν πληροφορίες για τα αρχεία και τους υποκαταλόγους ενός καταλόγου Π.χ. ονόματα, μεγέθη, χαρακτηριστικά (attributes), δικαιώματα πρόσβασης κ.τ.λ.
Ειδικά αρχεία (special files) Βρίσκονται στον κατάλογο /dev/ Παρέχουν τη σύνδεση με όλες τις συσκευές του Η/Υ Π.χ. /dev/fd0 ή /dev/mouse κ.τ.λ. Το UNIX επιτρέπει στο χρήστη να αντιμετωπίζει όλες τις συσκευές σαν αρχεία Π.χ. μπορεί κάποιος να αντιγράψει αρχεία στο αρχείο που αντιστοιχεί στον εκτυπωτή και αυτά να εκτυπωθούν κ.τ.λ.
Διεργασίες Μια διεργασία είναι ένα στιγμιότυπο ενός προγράμματος που εκτελείται από το λειτουργικό σύστημα. Η σχέση μεταξύ προγραμμάτων και διεργασιών δεν είναι 1 προς 1, Η εκτέλεση ενός προγράμματος μπορεί να προκαλέσει την δημιουργία πολλών διεργασιών.
Διεργασίες στο UNIX Το UNIX είναι ένα πολυδιεργαστικό (multi tasking) λειτουργικό σύστημα Ταυτόχρονη εκτέλεση πολλαπλών διεργασιών Οι ενεργές διεργασίες στο UNIX δεν εκτελούνται πραγματικά ταυτόχρονα, Ο αριθμός τους είναι πολύ μεγαλύτερος από τον αριθμό των επεξεργαστών του Η/Υ Στα κοινά συστήματα = 1
Χρονικός Διαμοιρασμός (Time sharing) Συναντάται πολύ συχνά στα πολυδιεργαστικά λειτουργικά συστήματα. Ο επεξεργαστής αφιερώνει ένα προκαθορισμένο χρονικό διάστημα για κάθε διεργασία Στη συνέχεια αναλαμβάνει την επόμενη στη σειρά διεργασία Όταν μία διεργασία περατωθεί ή ακυρωθεί, αφαιρείται από τη λίστα των διεργασιών Ο επεξεργαστής συνεχίζει με τις υπόλοιπες
Εκτέλεση στο Προσκήνιο Όταν ο χρήστης ζητήσει την εκτέλεση ενός προγράμματος, πληκτρολογώντας το όνομα του στη γραμμή εντολών, ο έλεγχος θα επανέλθει στη γραμμή εντολών μετά την περάτωση του προγράμματος Οι διεργασίες που ξεκινούν με αυτό τον τρόπο λέγεται ότι εκτελούνται στο προσκήνιο (foreground) επειδή παρακρατούν τον έλεγχο του τερματικού μέχρι την περάτωση τους.
Πολλαπλή Εκτέλεση Λειτουργιών σε Παραθυρικό Περιβάλλον Σε ένα σύστημα UNIX με υποστήριξη γραφικών (Χ Windows) ο χρήστης μπορεί να έχει περισσότερα από ένα τερματικά ανοιχτά Ακόμη και αν κάποιο είναι δεσμευμένο από μια εντολή που τρέχει στο προσκήνιο μπορεί να συνεχίσει να δουλεύει χρησιμοποιώντας κάποιο άλλο τερματικό.
Εκτέλεση στο Παρασκήνιο Όταν δεν υπάρχει παραθυρικό περιβάλλον η δυνατότητα ταυτόχρονης εκτέλεσης πολλών διεργασιών παρέχεται μέσω της εκτέλεσης διεργασιών στο παρασκήνιο (background). Μια διεργασία που εκτελείται στο παρασκήνιο χρησιμοποιεί το τερματικό μόνο όταν χρειάζεται να τυπώσει κάποιο μήνυμα ή να δεχτεί είσοδο από το πληκτρολόγιο. Στον υπόλοιπο χρόνο εκτελείται "σιωπηλά" και το τερματικό παραμένει ελεύθερο για νέες εντολές.
Δαίμονες (daemons) Με την εκκίνηση δημιουργούνται διεργασίες του παρασκηνίου Μένουν ενεργές καθ' όλη τη διάρκεια λειτουργίας του συστήματος Εκτελούν εργασίες ζωτικής σημασίας. Ονομάζονται δαίμονες H διαχείριση τους γίνεται από τον διαχειριστή (administrator) Συνήθεις δαίμονες: εκτύπωση (lpd), ηλεκτρονικό ταχυδρομείο (maild), δικτυακές υπηρεσίες (telnetd, ftpd) κ.α.
Δικαιώματα Αρχείων και Καταλόγων To UNIX είναι ένα multi-user λειτουργικό σύστημα Το χρησιμοποιούν πολλοί χρήστες. Οι χρήστες επιθυμούν δύο πράγματα που αφορούν τα δεδομένα τους: α) να προστατεύονται από τους υπόλοιπους χρήστες του συστήματος (Ιδιωτικότητα των δεδομένων) και β) να μπορούν να τα μοιράζονται με όποιους χρήστες επιθυμούν οι ίδιοι, κάτω από απόλυτα ελεγχόμενες συνθήκες.
Δικαιώματα Αρχείων και Καταλόγων Τα δικαιώματα (permissions) καθορίζουν: Ποιοι έχουν δικαίωμα πρόσβασης σε κάποιο αρχείο ή σε κάποιο κατάλογο Τι ακριβώς μπορούν να κάνουν με αυτό το αρχείο ή τον κατάλογο.
Χαρακτηριστικά (attributes) Για κάθε αρχείο (και κατάλογο) υπάρ-χουν χαρακτηριστικά που καθορίζουν τα δικαιώματα χρήσης του: Ο ιδιοκτήτης (owner) του αρχείου Η ομάδα (group) χρηστών στην οποία ανήκει το αρχείο Τα δικαιώματα του ιδιοκτήτη Τα δικαιώματα της ομάδας Τα δικαιώματα των υπόλοιπων χρηστών του συστήματος
Ιδιοκτήτης Αρχείου (owner) Συνήθως ο χρήστης που το δημιούργησε Υπάρχει η δυνατότητα να αλλάξει ο ιδιοκτήτης Είναι ο μόνος (από τους απλούς χρήστες) που μπορεί να τροποποιήσει τα δικαιώματα χρήσης
Ομάδες Χρηστών Οι ομάδες δίνουν τη δυνατότητα σε κάποιους χρήστες να μοιράζονται κάποια αρχεία Μπορεί να δουλεύουν μαζί σε κάποια εργασία-πρόγραμμα Μπορεί να απαγορευτεί η πρόσβαση αρχείων σε χρήστες που δεν ανήκουν στην ίδια ομάδα
Επικοινωνία στο UNIX Το UNIX υποστηρίζει πολλαπλούς χρήστες Μπορούν να χρησιμοποιούν (ακόμη και ταυτόχρονα) τους διαθέσιμους πόρους του συστήματος Η επικοινωνία μεταξύ των χρηστών είναι μία επιθυμητή ιδιότητα Το UNIX διαθέτει ένα σημαντικό αριθμό από εντολές, που υλοποιούν αυτήν την επικοινωνία.
Κελύφη (command shells) Στο UNIX συνήθως ο χρήστης αιτείται την εκτέλεση εντολών Π.χ. εντολή ls για να δει τα αρχεία του τρέχοντος καταλόγου Τις αιτήσεις του χρήστη (δηλαδή τις εντολές που πληκτρολογεί) τις δέχεται το τμήμα του λειτουργικού που ονομάζεται κέλυφος (shell).
Κελύφη (command shells) Το κέλυφος μεταβιβάζει τις εντολές στον πυρήνα του UNIX Αποσυνθέτει τις εντολές στα στοιχειώδη μέρη τους Μεταφράζει τις εντολές σε γλώσσα κατανοητή από τον πυρήνα Ο πυρήνας επιστρέφει τα αποτελέσματα στο κέλυφος Όταν τελειώσει την εκτέλεση Το κέλυφος εμφανίζει τα αποτελέσματα στο χρήστη Σε μορφή κατανοητή από αυτόν
Διάφορα Κελύφη Bourne shell - sh Το πρώτο κέλυφος για UNIX (Steve Bourne) Αποτελεί μέχρι και σήμερα το προκαθορισμένο κέλυφος για αρκετά συστήματα UNIX. Εμπλουτίστηκε με τον καιρό Αναπτύχθηκαν αρκετά άλλα κελύφη τα οποία προσφέρουν επιπλέον δυνατότητες Διατηρούν τη συμβατότητα με το sh C shell (csh), βελτιωμένο C shell (tcsh), Korn shell (ksh), POSIX shell (psh), δεύτερη έκδοση του Bourne shell (bash), zsh
Είσοδος και έξοδος από το Σύστημα Κάθε φορά που ένας χρήστης κάνει login εκτελείται αυτόματα ένα κέλυφος (συνήθως το sh) από το λειτουργικό σύστημα login shell Το κέλυφος που εκτελείται κατά την είσοδο καθορίζεται από το αρχείο /etc/passwd Περιέχει όλες τις πληροφορίες που χρειάζεται το UNIX για τους χρήστες του συστήματος Π.χ. login names, passwords, login shells, home directories κ.α.
Είσοδος και έξοδος από το Σύστημα Το sh εκτελεί τις εντολές που περιέχονται στο αρχείο ".profile" Στο home directory του χρήστη Στη συνέχεια το κέλυφος τυπώνει ένα σύμβολο Έτοιμο για να δεχτεί εντολές. prompt (=προτροπή) Η έξοδος από το κέλυφος σημαίνει έξοδο από το UNIX exit - logout - CTRL-D
Ανακατεύθυνση Εισόδου και Εξόδου To UNIX χειρίζεται τα αρχεία με γενικό τρόπο Με ευκολία καθορίζονται: Η πηγή από την οποία παίρνει είσοδο μία εντολή Το μέσο (αρχείο, οθόνη, συσκευή) στο οποίο θα σταλούν τα αποτελέσματα της Η ευελιξία οφείλεται στην αρχή της προκαθορισμένης εισόδου και εξόδου (standard input & standard output ή standard I/O)
Προκαθορισμένη είσοδος & Προκαθορισμένη έξοδος Όλα τα προγράμματα κάνουν χρήση 2 καναλιών για να δέχονται δεδομένα και να εξάγουν τα αποτελέσματα τους Οι εντολές και τα προγράμματα δε χρειάζεται να ξέρουν τι είναι συνδεδεμένο στις άκρες των δύο καναλιών Τον έλεγχο των μέσων που συνδέονται στα κανάλια τον αναλαμβάνει το κέλυφος Ο χρήστης μπορεί να τροφοδοτεί τα προγράμμα-τα με δεδομένα που προέρχονται από αρχεία, το πληκτρολόγιο ή άλλα προγράμματα Το ίδιο ισχύει και για την έξοδο
Προκαθορισμένη είσοδος & έξοδος στο UNIX Πρόγραμμα Κανάλι εισόδου Κανάλι εξόδου Πληκτρολόγιο Οθόνη Αρχείο
Ανακατεύθυνση Εισόδου-Εξόδου Το κέλυφος έχει 3 τρόπους για να αλλάξει την συνηθισμένη ροή των δεδομένων σε ένα πρόγραμμα: Ανακατεύθυνση εισόδου Ανακατεύθυνση εξόδου Σωλήνωση εντολών
Ανακατεύθυνση Εισόδου Το κέλυφος αλλάζει το μέσο από το οποίο το πρόγραμμα τροφοδοτείται με δεδομένα. By default, το πρόγραμμα δέχεται είσοδο από το πληκτρολόγιο (προκαθορισμένη μονάδα εισόδου) Για να αλλάξουμε την είσοδο ενός προγράμματος, μετά το όνομα της εντολής πληκτρολογούμε τον χαρακτήρα "<" και στη συνέχεια το όνομα του μέσου που θα χρησιμοποιήσουμε για είσοδο.
Ανακατεύθυνση Εισόδου - Παράδειγμα cat < file.txt Θα εκτελέσει την εντολή cat, η οποία θα πάρει ως είσοδο τα περιεχόμενα του αρχείου file.txt και θα τα τυπώσει στην οθόνη Η εντολή cat (χωρίς ορίσματα) θα περίμενε από το χρήστη να πληκτρολογήσει το κείμενο του στο πληκτρολόγιο (προκαθορισμένη είσοδος) και στη συνέχεια θα το τύπωνε στην οθόνη (προκαθορισμένη έξοδος).
Ανακατεύθυνση Εξόδου Το κέλυφος αλλάζει το μέσο στο οποίο κατευθύνεται η έξοδος του προγράμματος (αποτελέσματα) By default, το κέλυφος στέλνει τα αποτελέ-σματα όλων των προγραμμάτων στην οθόνη του υπολογιστή (ή του τερματικού). Για να αλλάξουμε την έξοδο ενός προγράμματος, μετά το όνομα του προγράμματος πληκτρολογούμε τον χαρακτήρα ">" και το όνομα του μέσου που θα χρησιμοποιήσουμε για έξοδο.
Ανακατεύθυνση Εξόδου - Παράδειγμα ls > alpha.txt Θα παράγει μια λίστα με τα αρχεία του τρέχοντος καταλόγου και θα την αποθηκεύσει στο αρχείο alpha.txt Αν το αρχείο alpha.txt δεν υπάρχει, τότε δημιουργείται Αν υπάρχει, τα περιεχόμενα του διαγράφονται και τη θέση τους παίρνουν τα αποτελέσματα της ls Χρήση του ">>" Αν το αρχείο υπάρχει, τα νέα δεδομένα προστίθενται στο τέλος του αρχείου
Ταυτόχρονη Ανακατεύθυνση Εισόδου και Εξόδου sort < input.txt > output.txt Εισαγωγή κειμένου από το κανάλι εισόδου Περιεχόμενα αρχείου input.txt Αλφαβητική ταξινόμηση από την sort Αποστολή ταξινομημένου κειμένου στο κανάλι εξόδου Αρχείο output.txt
Σωλήνωση Εντολών Με τη δυνατότητα αλλαγής εισόδου-εξόδου υπάρχει τρόπος σύνδεσης δύο εντολών, έτσι ώστε η μία να χρησιμοποιεί ως είσοδο την έξοδο της άλλης
Σωλήνωση Εντολών - Παράδειγμα Δημιουργία αρχείου inv_ls.txt με τη λίστα των αρχείων του τρέχοντος καταλόγου, ανάστροφα ταξινομημένα (από το z στο a). 1ο βήμα: Δημιουργία τη λίστας με τα αρχεία του τρέχοντος καταλόγου και αποθήκευση σε ένα προσωρινό αρχείο (π.χ. temp.txt). ls –l > temp.txt
Σωλήνωση Εντολών - Παράδειγμα Για να ταξινομήσουμε το αρχείο temp.txt ανάστροφα θα χρησιμοποιήσουμε την εντολή sort με παράμετρο -r (ανάστροφη ταξινόμηση) θα ανακατευθύνουμε την έξοδο της στο αρχείο inv_ls.txt θα διαγράψουμε το προσωρινό αρχείο temp.txt sort -r < temp.txt > inv_ls.txt rm temp.txt
Σωλήνωση Εντολών - Παράδειγμα Με έμμεσο τρόπο συνδέσαμε 2 εντολές (ls - sort) Η 2η έχει ως είσοδο την έξοδο της πρώτης Το κέλυφος δίνει δυνατότητα άμεσης σύνδεσης εντολών Η έξοδος μιας εντολής χρησιμοποιείται ως είσοδος για κάποια άλλη. Με τον χαρακτήρα "¦" Χρήση ως εισόδου για την εντολή που βρίσκεται στο δεξιό τμήμα την έξοδο της εντολής που βρίσκεται στο αριστερό τμήμα. ls -l ¦ sort -r > inv_ls.txt
Κανάλι Σφαλμάτων Εκτός από τα 2 κανάλια (προκαθορισμένης εισόδου και εξόδου) υπάρχει και 3ο κανάλι (κανάλι σφαλμάτων) Το χρησιμοποιούν οι εντολές του UNIX και αρκετά προγράμματα για να τυπώνουν πιθανά μηνύματα σφαλμάτων που προκύπτουν κατά τη διάρκεια της εκτέλεσης Όταν ανακατευθύνουμε την έξοδο ενός προγράμματος, ανακατευθύνουμε το κανάλι εξόδου μόνο και όχι και το κανάλι σφαλμάτων.
Κανάλι Σφαλμάτων - Παράδειγμα cat nofile.doc Αν το αρχείο nofile.doc δεν υπάρχει στον τρέχοντα κατάλογο, θα πάρουμε το ακόλουθο μήνυμα στην οθόνη: cat: cannot open nofile.doc Το μήνυμα εμφανίζεται στην οθόνη μέσω του καναλιού σφαλμάτων και όχι μέσω του καναλιού εξόδου.
Κανάλι Σφαλμάτων - Παράδειγμα cat nofile.doc > dummy cat: cannot open nofile.doc cat dummy τίποτα Η cat ξανατύπωσε στην οθόνη το ίδιο μήνυμα ενώ δεν έστειλε τίποτα στο κανάλι εξόδου (το αρχείο dummy είναι κενό).
Κανάλι Σφαλμάτων - Ανακατεύθυνση Το κέλυφος δίνει τη δυνατότητα ανακατεύθυνσης Με τους χαρακτήρες "2>" cat nofile.doc 2> dummy cat dummy cat: cannot open nofile.doc Το μήνυμα λάθους της εντολής cat δεν τυπώθηκε στην οθόνη αλλά ανακατευθύνθηκε στο αρχείο dummy
Ανακατεύθυνση Εισόδου/Εξόδου και Γλώσσα C Για να μπορούν τα προγράμματα σε γλώσσα C να χρησιμοποιούν τη δυνατό-τητα ανακατεύθυνσης εισόδου/εξόδου πρέπει να χρησιμοποιούν τις συναρτή-σεις εισόδου/εξόδου οι οποίες απευθύ-νονται στην πρότυπη είσοδο/έξοδο (stdin/stdout) getchar(), putchar(), printf(), scanf()