Γλώσσα C & Unix

67
Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο Διδάσκοντες Ν. Βασιλειάδης, Επίκουρος Καθηγητής (θεωρία) Δ. Βράκας, Μεταδιδάκτορας (εργαστήριο) lpis.csd.auth.gr/curriculum/C+Unix/UNCL202.html

description

lpis . csd . auth . gr / curriculum / C + Unix / UNCL 202. html. Γλώσσα C & Unix. Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο. Διδάσκοντες Ν. Βασιλειάδης, Επίκουρος Καθηγητής (θεωρία) Δ. Βράκας, Μεταδιδάκτορας (εργαστήριο). Δομή του Μαθήματος. Εισαγωγή στο Unix - PowerPoint PPT Presentation

Transcript of Γλώσσα C & Unix

Page 1: Γλώσσα  C & Unix

Γλώσσα C & Unix

Τμήμα Πληροφορικής, ΑΠΘB’ εξάμηνο

ΔιδάσκοντεςΝ. Βασιλειάδης, Επίκουρος Καθηγητής (θεωρία)Δ. Βράκας, Μεταδιδάκτορας (εργαστήριο)

lpis.csd.auth.gr/curriculum/C+Unix/UNCL202.html

Page 2: Γλώσσα  C & Unix

Δομή του Μαθήματος

Εισαγωγή στο Unix Σύντομη επανάληψη της Γλώσσας C

(δείκτες, δομές) Δυναμικές δομές δεδομένων Είσοδος/έξοδος σε αρχεία (υψηλού –

χαμηλού επιπέδου) Αλληλεπίδραση με Unix Προγραμματισμός κελύφους Unix Ανάπτυξη εφαρμογών σε C

Page 3: Γλώσσα  C & Unix

Εισαγωγή στο Unix

Γλώσσα C & Unix

Page 4: Γλώσσα  C & Unix

Ιστορική Αναδρομή (1/3)

Multics Τέλη ‘60 Ινστιτούτο ΜΙΤ της Βοστόνης, εργαστήρα

AT&T Bell labs, General Electrics UNICS (Kernigham)

1969 Thompson (Multics), Ritchie, Canaday Απλό λειτουργικό σύστημα για τον PDP-7 Για να εκτελείται με χαμηλό κόστος ένα

παιχνίδι με όνομα Space Travel 1 χρόνο αργότερα μετονομάστηκε σε UNIX

Page 5: Γλώσσα  C & Unix

Ιστορική Αναδρομή (2/3)

Τo UNIX εξελίχθηκε ραγδαία τη δεκαετία του 1970

Η σημαντικότερη στιγμή του είναι το 1979 με την κυκλοφορία της 7ης έκδοσης, που θεωρείται ο άμεσος πρόγονος των σύγχρονων συστημάτων UNIX.

Page 6: Γλώσσα  C & Unix

Ιστορική Αναδρομή (3/3)

Αρκετές εταιρίες το υιοθέτησαν και ανέπτυξαν τις δικές τους εκδόσεις. Sun Microsystems, Microsoft

Στα τέλη του 1980, η AT&T Bell labs η Sun Microsystems και η Microsoft ανέπτυξαν την 4η έκδοση του UNIX System V. Δημιουργία άλλων συμμαχιών για να

ανταγωνιστούν το System V και την επικράτηση στην αγορά.

Τελικά όλοι συμφώνησαν στην ανάπτυξη ενός κοινού πυρήνα

Κάθε εταιρία θα μπορούσε να προσθέτει επιπλέον χαρακτηριστικά στις δικές τις εκδόσεις

Page 7: Γλώσσα  C & Unix

Εκδόσεις του UNIX (1/2) Linux

Αρχικά μόνο για PC (όχι μόνο πλέον) ιδιαίτερα δημοφιλής γιατί διανέμεται δωρεάν υπάρχει μεγάλη κοινότητα από προγραμματιστές

που συνεχώς το επεκτείνουν και εκδίδουν νέες εκδόσεις και εφαρμογές.

Solaris Μετεξέλιξη του SunOS από την εταιρεία Sun

Microsystems η οποία κατέχει ένα μεγάλο μέρος στην αγορά σταθμών εργασίας (workstation)

SCO Unix: Santa Cruz Operation Βασίστηκε στο System V/386 για τον επεξεργαστή

80386 της Intel.

Page 8: Γλώσσα  C & Unix

Εκδόσεις του UNIX (2/2)

IRIX: Silicon Graphics HP-UX: Hewlett Packard True64 Unix: Compaq DEC ΑΙΧ: IBM A/UX: Apple

Page 9: Γλώσσα  C & Unix

Το UNIX Σήμερα

Ισχυρό, εύκαμπτο και προπάντων σταθερό λειτουργικό σύστημα

Χρησιμοποιείται από περίπου 20 εκατομμύρια υπολογιστές και 100 εκατομμύρια χρήστες σε ολόκληρο τον κόσμο.

Page 10: Γλώσσα  C & Unix

Παράγοντες Επιτυχίας

Σταθερότητα - αξιοπιστία Ελεύθερη διακίνηση του πηγαίου κώδικα και όχι

μόνο των εκτελέσιμων Μεγάλος αριθμός από utilities και προγράμματα

που αναπτύχθηκαν από τρίτους Δυνατότητες multitasking και multiuser Εξαιρετικές δυνατότητες για δικτύωση

υπολογιστών Η μεταφερσιμότητα (portability) του, που οφείλεται

στο γεγονός ότι το UNIX είναι εξ’ ολοκλήρου γραμμένο σε γλώσσα προγραμματισμού C και επομένως μπορεί πολύ εύκολα να κυκλοφορήσει έκδοση για οποιαδήποτε πλατφόρμα διαθέτει μεταγλωττιστή της γλώσσας C.

Page 11: Γλώσσα  C & Unix

Σύντομη Ιστορία της C (1/5)

Αναπτύχθηκε το 1969 - 1973 στα Bell Laboratories (Lucent Technologies) από τον Dennis Ritchie.

Είναι στενά συνδεδεμένη με το λειτουργικό σύστημα Unix όπου και αναπτύχθηκε, αφού τόσο το σύστημα όσο και τα περισσότερα προγράμματα που τρέχουν σ’ αυτό είναι γραμμένα σε C.

Page 12: Γλώσσα  C & Unix

Σύντομη Ιστορία της C (2/5)

Προέρχεται έμμεσα από την γλώσσα BCPL, η οποία οδήγησε αρχικά σε μια άλλη γλώσσα την B.

Η γλώσσα B χρησιμοποιήθηκε το 1969 για την συγγραφή του πρώτου συστήματος Unix στον υπολογιστή DEC PDP-7.

Πάνω σε αυτήν βασίστηκε ο Ritchie για τη δημιουργία της C.

Page 13: Γλώσσα  C & Unix

Σύντομη Ιστορία της C (3/5)

Κάποιες αλλαγές έγιναν 1977 - 1979, κατά την επίδειξη της ανεξαρτησίας του συστήματος Unix από αρχιτεκτονικές υπολογιστών.

Τότε εμφανίστηκε η πρώτη ευρέως διαθέσιμη περιγραφή της γλώσσας

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

Page 14: Γλώσσα  C & Unix

Σύντομη Ιστορία της C (4/5)

Tο 1983 συστάθηκε η επιτροπή ANSI X3J11 με σκοπό την προτυποποίηση της C

Πραγματοποιήθηκε το 1989 επιφέροντας μερικές επιπλέον αλλαγές στη γλώσσα.

Το πρότυπο ANSI C επέτρεψε τη δημιουργία μεταγλωττιστών ικανών να χειρίζονται το ίδιο σωστά όλα τα προγράμματα γραμμένα σε ANSI C

Page 15: Γλώσσα  C & Unix

Σύντομη Ιστορία της C (5/5)

Με την έλευση του αντικειμενοστρα-φούς προγραμματισμού δημιουρ-γήθηκε και η επέκταση της C με υποστήριξη αντικειμένων, η C++.

Σήμερα η C++ είναι μια από τις πιο διαδεδομένες γλώσσες ενσωματω-μένη σε ολοκληρωμένα εργαλεία ανάπτυξης εφαρμογών,

Π.χ. C++ Builder, Visual C++

Page 16: Γλώσσα  C & Unix

Έννοια multi-tasking

Multi-tasking θεωρούνται τα Λειτουργικά Συστήματα στα οποία ο χρήστης έχει τη δυνατότητα της παράλληλης εκτέλεσης πολλών διεργασιών

Οι χρονοβόρες διεργασίες δεν αναγκάζουν τον χρήστη να περιμένει την περάτωση τους σε περίπτωση που προκύψει κάτι επείγον

Η πολλαπλή εκτέλεση διεργασιών υλοποιείται με την τεχνική διαμοιρασμού-χρόνου (time-sharing).

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

Page 17: Γλώσσα  C & Unix

Έννοια multi-user

Multi-User Λειτουργικά Συστήματα ονομάζονται αυτά, που υποστηρίζουν πολλαπλούς χρήστες, οι οποίοι μπορούν να εργάζονται ταυτόχρονα.

Page 18: Γλώσσα  C & Unix

Επιθυμητές ιδιότητες Διαμόρφωση του περιβάλλοντος εργασίας για

κάθε χρήστη ξεχωριστά Ασφάλεια (privacy) των ιδιωτικών δεδομένων Μεταφερσιμότητα (portability)

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

Επικοινωνία μεταξύ των χρηστών του συστήματος

Ανταλλαγής δεδομένων μεταξύ των χρηστών Οικονομία

Κοινή χρήση διαθέσιμου λογισμικού και υλικού (εκτυπωτές, σαρωτές κ.τ.λ.) από πολλούς χρήστες.

Page 19: Γλώσσα  C & Unix

Υλοποίηση multi-user στο UNIX

Λογαριασμοί (accounts) Οι λογαριασμοί ξεχωρίζουν μεταξύ τους με

τα login names (ή user names). Password Κατάλογος στο Σύστημα Αρχείων του

Λειτουργικού Συστήματος (home directory) Eπιτυχής είσοδος (log on)

Το UNIX «διαβάζει» ορισμένα αρχεία που βρίσκονται στον προσωπικό του κατάλογο ώστε να προσαρμόσει το περιβάλλον εργασίας στις ανάγκες του χρήστη.

Page 20: Γλώσσα  C & Unix

Administrator

Ο λογαριασμός του Διαχειριστή του Συστήματος (Administrator ή root) έχει απεριόριστες δυνατότητες στο σύστημα

Δυνατότητα δημιουργίας και κατάργησης άλλων λογαριασμών

Page 21: Γλώσσα  C & Unix

Η Δομή του UNIX

Ε φ α ρ μ ο γ έ ς

Κ έ λ υ φ ο ς

Π υ ρ ή ν α ς

H a r d w a r e

Page 22: Γλώσσα  C & Unix

Πυρήνας (kernel)

Το τμήμα που αλληλεπιδρά άμεσα με το υλικό (hardware) του συστήματος.

Επικοινωνεί με όλες τις συσκευές του υπολογιστή

Παρέχει στο κέλυφος ένα σύνολο από απλές εντολές π.χ. άνοιξε αρχείο

Το κέλυφος δεν χρειάζεται να γνωρίζει λεπτομέρειες για το συγκεκριμένο υλικό.

Page 23: Γλώσσα  C & Unix

Κέλυφος (shell)

Παίζει το ρόλο του διαμεσολαβητή ανάμεσα στον πυρήνα και στο χρήστη ή στις εφαρμογές

Ο χρήστης πληκτρολογεί εντολές στο κέλυφος Αυτό είναι υπεύθυνο για την μετάφραση και την

προώθηση τους σε κατάλληλη μορφή στον πυρήνα. Το κέλυφος υπάρχει γιατί οι εντολές που

χρησιμοποιεί ο πυρήνας είναι χαμηλού επιπέδου Θα ήταν ιδιαίτερα δύσκολο και άβολο για τον

χρήστη να εργάζεται με αυτές.

Page 24: Γλώσσα  C & Unix

Εφαρμογές (applications)

Προγράμματα τα οποία έχουν γραφεί σε γλώσσες προγραμματισμού (π.χ. C) ή στο ίδιο το κέλυφος και επιτελούν ορισμένες σύνθετες λειτουργίες. Απλά: π.χ. αριθμομηχανή (calculator) Σύνθετα: π.χ. πρόγραμμα μηχανοργάνωσης

μιας επιχείρησης Οι εφαρμογές επικοινωνούν με το κέλυφος

για να διαβιβάσουν σε αυτό τις κατάλληλες εντολές.

Page 25: Γλώσσα  C & Unix

Σύστημα Αρχείων (File System)

Το σύστημα αρχείων του UNIX αποτελεί μια λογική μέθοδο οργάνωσης, αποθήκευσης, αναζήτησης και διαχείρισης δεδομένων.

Τα αρχεία είναι δομημένα σε μια ιεραρχία από καταλόγους για εύκολη αναζήτηση.

H έννοια του αρχείου είναι διευρυμένη Σαν αρχεία αντιμετωπίζονται όλα τα

συστατικά του συστήματος, ακόμη και οι υλικές συσκευές, όπως οι εκτυπωτές και οι σκληροί δίσκοι.

Page 26: Γλώσσα  C & Unix

Case sensitiveness

Στο UNIX οι χαρακτήρες που αντιστοιχούν στα πεζά γράμματα θεωρούνται διαφορετικοί από τους αντίστοιχους των κεφαλαίων γραμμάτων

input.txt, INPUT.TXT, Input.txt, input.TXT

Page 27: Γλώσσα  C & Unix

Τύποι Αρχείων

Κανονικά αρχεία (Ordinary files)

Σύνδεσμοι (links) ή hard links

Συμβολικοί σύνδεσμοι ή soft links

Κατάλογοι (Directories)

Ειδικά αρχεία (special files)

Page 28: Γλώσσα  C & Unix

Σύνδεσμοι (links) ή hard links

Παρέχουν τη δυνατότητα ύπαρξης πολλαπλών αντιγράφων ενός αρχείου σε διαφορετικούς υποκαταλόγους του ίδιου φυσικού μέσου.

Τα αντίγραφα υλοποιούνται μόνο σε λογικό επίπεδο.

Δεν δημιουργούνται πραγματικά αντίγραφα απλά σύνδεσμοι που ανακατευθύνουν οποιαδήποτε εντολή πάνω στον σύνδεσμο στο πραγματικό αρχείο.

Page 29: Γλώσσα  C & Unix

Συμβολικοί σύνδεσμοι ή soft links

Σύνδεσμοι οι οποίοι μπορούν να αναφέρονται και σε υποκαταλόγους αλλά και σε αρχεία διαφορετικών φυσικών μέσων αποθήκευσης

Μπορούν να αναφέρονται και σε αρχεία που βρίσκονται σε διαφορετικούς Η/Υ στο τοπικό δίκτυο ή ακόμη και σε απομακρυσμένα δίκτυα (π.χ μέσω του Διαδικτύου).

Page 30: Γλώσσα  C & Unix

Κατάλογοι (Directories)

Αρχεία, τα οποία τα χειρίζεται διαφορετικά το λειτουργικό σύστημα

Περιέχουν πληροφορίες για τα αρχεία και τους υποκαταλόγους ενός καταλόγου

Π.χ. ονόματα, μεγέθη, χαρακτηριστικά (attributes), δικαιώματα πρόσβασης κ.τ.λ.

Page 31: Γλώσσα  C & Unix

Ειδικά αρχεία (special files)

Βρίσκονται στον κατάλογο /dev/ Παρέχουν τη σύνδεση με όλες τις

συσκευές του Η/Υ Π.χ. /dev/fd0 ή /dev/mouse κ.τ.λ.

Το UNIX επιτρέπει στο χρήστη να αντιμετωπίζει όλες τις συσκευές σαν αρχεία

Π.χ. μπορεί κάποιος να αντιγράψει αρχεία στο αρχείο που αντιστοιχεί στον εκτυπωτή και αυτά να εκτυπωθούν κ.τ.λ.

Page 32: Γλώσσα  C & Unix

Διεργασίες

Μια διεργασία είναι ένα στιγμιότυπο ενός προγράμματος που εκτελείται από το λειτουργικό σύστημα.

Η σχέση μεταξύ προγραμμάτων και διεργασιών δεν είναι 1 προς 1,

Η εκτέλεση ενός προγράμματος μπορεί να προκαλέσει την δημιουργία πολλών διεργασιών.

Page 33: Γλώσσα  C & Unix

Διεργασίες στο UNIX

Το UNIX είναι ένα πολυδιεργαστικό (multi tasking) λειτουργικό σύστημα

Ταυτόχρονη εκτέλεση πολλαπλών διεργασιών

Οι ενεργές διεργασίες στο UNIX δεν εκτελούνται πραγματικά ταυτόχρονα, Ο αριθμός τους είναι πολύ μεγαλύτερος

από τον αριθμό των επεξεργαστών του Η/Υ

Στα κοινά συστήματα = 1

Page 34: Γλώσσα  C & Unix

Χρονικός Διαμοιρασμός (Time sharing)

Συναντάται πολύ συχνά στα πολυδιεργαστικά λειτουργικά συστήματα.

Ο επεξεργαστής αφιερώνει ένα προκαθορισμένο χρονικό διάστημα για κάθε διεργασία Στη συνέχεια αναλαμβάνει την επόμενη στη

σειρά διεργασία Όταν μία διεργασία περατωθεί ή

ακυρωθεί, αφαιρείται από τη λίστα των διεργασιών Ο επεξεργαστής συνεχίζει με τις υπόλοιπες

Page 35: Γλώσσα  C & Unix

Εκτέλεση στο Προσκήνιο

Όταν ο χρήστης ζητήσει την εκτέλεση ενός προγράμματος, πληκτρολογώντας το όνομα του στη γραμμή εντολών, ο έλεγχος θα επανέλθει στη γραμμή εντολών μετά την περάτωση του προγράμματος

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

Page 36: Γλώσσα  C & Unix

Πολλαπλή Εκτέλεση Λειτουργιών σε Παραθυρικό Περιβάλλον

Σε ένα σύστημα UNIX με υποστήριξη γραφικών (Χ Windows) ο χρήστης μπορεί να έχει περισσότερα από ένα τερματικά ανοιχτά Ακόμη και αν κάποιο είναι δεσμευμένο

από μια εντολή που τρέχει στο προσκήνιο μπορεί να συνεχίσει να δουλεύει χρησιμοποιώντας κάποιο άλλο τερματικό.

Page 37: Γλώσσα  C & Unix

Εκτέλεση στο Παρασκήνιο

Όταν δεν υπάρχει παραθυρικό περιβάλλον η δυνατότητα ταυτόχρονης εκτέλεσης πολλών διεργασιών παρέχεται μέσω της εκτέλεσης διεργασιών στο παρασκήνιο (background).

Μια διεργασία που εκτελείται στο παρασκήνιο χρησιμοποιεί το τερματικό μόνο όταν χρειάζεται να τυπώσει κάποιο μήνυμα ή να δεχτεί είσοδο από το πληκτρολόγιο.

Στον υπόλοιπο χρόνο εκτελείται "σιωπηλά" και το τερματικό παραμένει ελεύθερο για νέες εντολές.

Page 38: Γλώσσα  C & Unix

Δαίμονες (daemons)

Με την εκκίνηση δημιουργούνται διεργασίες του παρασκηνίου Μένουν ενεργές καθ' όλη τη διάρκεια λειτουργίας

του συστήματος Εκτελούν εργασίες ζωτικής σημασίας.

Ονομάζονται δαίμονες H διαχείριση τους γίνεται από τον

διαχειριστή (administrator) Συνήθεις δαίμονες: εκτύπωση (lpd),

ηλεκτρονικό ταχυδρομείο (maild), δικτυακές υπηρεσίες (telnetd, ftpd) κ.α.

Page 39: Γλώσσα  C & Unix

Δικαιώματα Αρχείων και Καταλόγων

To UNIX είναι ένα multi-user λειτουργικό σύστημα Το χρησιμοποιούν πολλοί χρήστες.

Οι χρήστες επιθυμούν δύο πράγματα που αφορούν τα δεδομένα τους: α) να προστατεύονται από τους

υπόλοιπους χρήστες του συστήματος (Ιδιωτικότητα των δεδομένων) και

β) να μπορούν να τα μοιράζονται με όποιους χρήστες επιθυμούν οι ίδιοι, κάτω από απόλυτα ελεγχόμενες συνθήκες.

Page 40: Γλώσσα  C & Unix

Δικαιώματα Αρχείων και Καταλόγων

Τα δικαιώματα (permissions) καθορίζουν:Ποιοι έχουν δικαίωμα πρόσβασης

σε κάποιο αρχείο ή σε κάποιο κατάλογο

Τι ακριβώς μπορούν να κάνουν με αυτό το αρχείο ή τον κατάλογο.

Page 41: Γλώσσα  C & Unix

Χαρακτηριστικά (attributes)

Για κάθε αρχείο (και κατάλογο) υπάρ-χουν χαρακτηριστικά που καθορίζουν τα δικαιώματα χρήσης του: Ο ιδιοκτήτης (owner) του αρχείου Η ομάδα (group) χρηστών στην οποία

ανήκει το αρχείο Τα δικαιώματα του ιδιοκτήτη Τα δικαιώματα της ομάδας Τα δικαιώματα των υπόλοιπων

χρηστών του συστήματος

Page 42: Γλώσσα  C & Unix

Ιδιοκτήτης Αρχείου (owner)

Συνήθως ο χρήστης που το δημιούργησε

Υπάρχει η δυνατότητα να αλλάξει ο ιδιοκτήτης

Είναι ο μόνος (από τους απλούς χρήστες) που μπορεί να τροποποιήσει τα δικαιώματα χρήσης

Page 43: Γλώσσα  C & Unix

Ομάδες Χρηστών

Οι ομάδες δίνουν τη δυνατότητα σε κάποιους χρήστες να μοιράζονται κάποια αρχεία Μπορεί να δουλεύουν μαζί σε κάποια

εργασία-πρόγραμμα

Μπορεί να απαγορευτεί η πρόσβαση αρχείων σε χρήστες που δεν ανήκουν στην ίδια ομάδα

Page 44: Γλώσσα  C & Unix

Επικοινωνία στο UNIX

Το UNIX υποστηρίζει πολλαπλούς χρήστες Μπορούν να χρησιμοποιούν (ακόμη και

ταυτόχρονα) τους διαθέσιμους πόρους του συστήματος

Η επικοινωνία μεταξύ των χρηστών είναι μία επιθυμητή ιδιότητα

Το UNIX διαθέτει ένα σημαντικό αριθμό από εντολές, που υλοποιούν αυτήν την επικοινωνία.

Page 45: Γλώσσα  C & Unix

Κελύφη (command shells)

Στο UNIX συνήθως ο χρήστης αιτείται την εκτέλεση εντολών Π.χ. εντολή ls για να δει τα αρχεία του

τρέχοντος καταλόγου

Τις αιτήσεις του χρήστη (δηλαδή τις εντολές που πληκτρολογεί) τις δέχεται το τμήμα του λειτουργικού που ονομάζεται κέλυφος (shell).

Page 46: Γλώσσα  C & Unix

Κελύφη (command shells)

Το κέλυφος μεταβιβάζει τις εντολές στον πυρήνα του UNIX Αποσυνθέτει τις εντολές στα στοιχειώδη μέρη

τους Μεταφράζει τις εντολές σε γλώσσα κατανοητή

από τον πυρήνα Ο πυρήνας επιστρέφει τα αποτελέσματα στο

κέλυφος Όταν τελειώσει την εκτέλεση

Το κέλυφος εμφανίζει τα αποτελέσματα στο χρήστη Σε μορφή κατανοητή από αυτόν

Page 47: Γλώσσα  C & 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

Page 48: Γλώσσα  C & Unix

Είσοδος και έξοδος από το Σύστημα

Κάθε φορά που ένας χρήστης κάνει login εκτελείται αυτόματα ένα κέλυφος (συνήθως το sh) από το λειτουργικό σύστημα login shell

Το κέλυφος που εκτελείται κατά την είσοδο καθορίζεται από το αρχείο /etc/passwd Περιέχει όλες τις πληροφορίες που χρειάζεται το

UNIX για τους χρήστες του συστήματος Π.χ. login names, passwords, login shells, home

directories κ.α.

Page 49: Γλώσσα  C & Unix

Είσοδος και έξοδος από το Σύστημα

Το sh εκτελεί τις εντολές που περιέχονται στο αρχείο ".profile" Στο home directory του χρήστη

Στη συνέχεια το κέλυφος τυπώνει ένα σύμβολο Έτοιμο για να δεχτεί εντολές. prompt (=προτροπή)

Η έξοδος από το κέλυφος σημαίνει έξοδο από το UNIX exit - logout - CTRL-D

Page 50: Γλώσσα  C & Unix

Ανακατεύθυνση Εισόδου και Εξόδου

To UNIX χειρίζεται τα αρχεία με γενικό τρόπο

Με ευκολία καθορίζονται: Η πηγή από την οποία παίρνει είσοδο μία

εντολή Το μέσο (αρχείο, οθόνη, συσκευή) στο

οποίο θα σταλούν τα αποτελέσματα της Η ευελιξία οφείλεται στην αρχή της

προκαθορισμένης εισόδου και εξόδου (standard input & standard output ή standard I/O)

Page 51: Γλώσσα  C & Unix

Προκαθορισμένη είσοδος & Προκαθορισμένη έξοδος

Όλα τα προγράμματα κάνουν χρήση 2 καναλιών για να δέχονται δεδομένα και να εξάγουν τα αποτελέσματα τους

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

Τον έλεγχο των μέσων που συνδέονται στα κανάλια τον αναλαμβάνει το κέλυφος Ο χρήστης μπορεί να τροφοδοτεί τα προγράμμα-

τα με δεδομένα που προέρχονται από αρχεία, το πληκτρολόγιο ή άλλα προγράμματα

Το ίδιο ισχύει και για την έξοδο

Page 52: Γλώσσα  C & Unix

Προκαθορισμένη είσοδος & έξοδος στο UNIX

ΠρόγραμμαΚανάλι εισόδου Κανάλι εξόδου

Πληκτρολόγιο

Οθόνη

Αρχείο Πρόγραμμα Αρχείο Πρόγραμμα

Page 53: Γλώσσα  C & Unix

Ανακατεύθυνση Εισόδου-Εξόδου

Το κέλυφος έχει 3 τρόπους για να αλλάξει την συνηθισμένη ροή των δεδομένων σε ένα πρόγραμμα:Ανακατεύθυνση εισόδου Ανακατεύθυνση εξόδου Σωλήνωση εντολών

Page 54: Γλώσσα  C & Unix

Ανακατεύθυνση Εισόδου

Το κέλυφος αλλάζει το μέσο από το οποίο το πρόγραμμα τροφοδοτείται με δεδομένα.

By default, το πρόγραμμα δέχεται είσοδο από το πληκτρολόγιο (προκαθορισμένη μονάδα εισόδου)

Για να αλλάξουμε την είσοδο ενός προγράμματος, μετά το όνομα της εντολής πληκτρολογούμε τον χαρακτήρα "<" και στη συνέχεια το όνομα του μέσου που θα χρησιμοποιήσουμε για είσοδο.

Page 55: Γλώσσα  C & Unix

Ανακατεύθυνση Εισόδου - Παράδειγμα

cat < file.txt Θα εκτελέσει την εντολή cat, η

οποία θα πάρει ως είσοδο τα περιεχόμενα του αρχείου file.txt και θα τα τυπώσει στην οθόνη Η εντολή cat (χωρίς ορίσματα) θα

περίμενε από το χρήστη να πληκτρολογήσει το κείμενο του στο πληκτρολόγιο (προκαθορισμένη είσοδος) και στη συνέχεια θα το τύπωνε στην οθόνη (προκαθορισμένη έξοδος).

Page 56: Γλώσσα  C & Unix

Ανακατεύθυνση Εξόδου

Το κέλυφος αλλάζει το μέσο στο οποίο κατευθύνεται η έξοδος του προγράμματος (αποτελέσματα)

By default, το κέλυφος στέλνει τα αποτελέ-σματα όλων των προγραμμάτων στην οθόνη του υπολογιστή (ή του τερματικού).

Για να αλλάξουμε την έξοδο ενός προγράμματος, μετά το όνομα του προγράμματος πληκτρολογούμε τον χαρακτήρα ">" και το όνομα του μέσου που θα χρησιμοποιήσουμε για έξοδο.

Page 57: Γλώσσα  C & Unix

Ανακατεύθυνση Εξόδου - Παράδειγμα

ls > alpha.txt Θα παράγει μια λίστα με τα αρχεία του

τρέχοντος καταλόγου και θα την αποθηκεύσει στο αρχείο alpha.txt Αν το αρχείο alpha.txt δεν υπάρχει, τότε

δημιουργείται Αν υπάρχει, τα περιεχόμενα του διαγράφονται

και τη θέση τους παίρνουν τα αποτελέσματα της ls

Χρήση του ">>" Αν το αρχείο υπάρχει, τα νέα δεδομένα

προστίθενται στο τέλος του αρχείου

Page 58: Γλώσσα  C & Unix

Ταυτόχρονη Ανακατεύθυνση Εισόδου και Εξόδου

sort < input.txt > output.txt Εισαγωγή κειμένου από το κανάλι

εισόδου Περιεχόμενα αρχείου input.txt

Αλφαβητική ταξινόμηση από την sort Αποστολή ταξινομημένου κειμένου

στο κανάλι εξόδου Αρχείο output.txt

Page 59: Γλώσσα  C & Unix

Σωλήνωση Εντολών

Με τη δυνατότητα αλλαγής εισόδου-εξόδου υπάρχει τρόπος σύνδεσης δύο εντολών, έτσι ώστε η μία να χρησιμοποιεί ως είσοδο την έξοδο της άλλης

Page 60: Γλώσσα  C & Unix

Σωλήνωση Εντολών - Παράδειγμα

Δημιουργία αρχείου inv_ls.txt με τη λίστα των αρχείων του τρέχοντος καταλόγου, ανάστροφα ταξινομημένα (από το z στο a).

1ο βήμα: Δημιουργία τη λίστας με τα αρχεία του τρέχοντος καταλόγου και αποθήκευση σε ένα προσωρινό αρχείο (π.χ. temp.txt).

ls –l > temp.txt

Page 61: Γλώσσα  C & Unix

Σωλήνωση Εντολών - Παράδειγμα

Για να ταξινομήσουμε το αρχείο temp.txt ανάστροφα θα χρησιμοποιήσουμε την εντολή sort με

παράμετρο -r (ανάστροφη ταξινόμηση) θα ανακατευθύνουμε την έξοδο της στο

αρχείο inv_ls.txt θα διαγράψουμε το προσωρινό αρχείο temp.txt

sort -r < temp.txt > inv_ls.txt rm temp.txt

Page 62: Γλώσσα  C & Unix

Σωλήνωση Εντολών - Παράδειγμα

Με έμμεσο τρόπο συνδέσαμε 2 εντολές (ls - sort) Η 2η έχει ως είσοδο την έξοδο της πρώτης

Το κέλυφος δίνει δυνατότητα άμεσης σύνδεσης εντολών Η έξοδος μιας εντολής χρησιμοποιείται ως

είσοδος για κάποια άλλη. Με τον χαρακτήρα "¦"

Χρήση ως εισόδου για την εντολή που βρίσκεται στο δεξιό τμήμα την έξοδο της εντολής που βρίσκεται στο αριστερό τμήμα.

ls -l ¦ sort -r > inv_ls.txt

Page 63: Γλώσσα  C & Unix

Κανάλι Σφαλμάτων

Εκτός από τα 2 κανάλια (προκαθορισμένης εισόδου και εξόδου) υπάρχει και 3ο κανάλι (κανάλι σφαλμάτων)

Το χρησιμοποιούν οι εντολές του UNIX και αρκετά προγράμματα για να τυπώνουν πιθανά μηνύματα σφαλμάτων που προκύπτουν κατά τη διάρκεια της εκτέλεσης

Όταν ανακατευθύνουμε την έξοδο ενός προγράμματος, ανακατευθύνουμε το κανάλι εξόδου μόνο και όχι και το κανάλι σφαλμάτων.

Page 64: Γλώσσα  C & Unix

Κανάλι Σφαλμάτων - Παράδειγμα

cat nofile.doc Αν το αρχείο nofile.doc δεν

υπάρχει στον τρέχοντα κατάλογο, θα πάρουμε το ακόλουθο μήνυμα στην οθόνη:

cat: cannot open nofile.doc Το μήνυμα εμφανίζεται στην οθόνη

μέσω του καναλιού σφαλμάτων και όχι μέσω του καναλιού εξόδου.

Page 65: Γλώσσα  C & Unix

Κανάλι Σφαλμάτων - Παράδειγμα

cat nofile.doc > dummy

cat: cannot open nofile.doc cat dummy

τίποτα Η cat ξανατύπωσε στην οθόνη το ίδιο

μήνυμα ενώ δεν έστειλε τίποτα στο κανάλι εξόδου (το αρχείο dummy είναι κενό).

Page 66: Γλώσσα  C & Unix

Κανάλι Σφαλμάτων - Ανακατεύθυνση

Το κέλυφος δίνει τη δυνατότητα ανακατεύθυνσης

Με τους χαρακτήρες "2>" cat nofile.doc 2> dummy cat dummy

cat: cannot open nofile.doc Το μήνυμα λάθους της εντολής cat δεν

τυπώθηκε στην οθόνη αλλά ανακατευθύνθηκε στο αρχείο dummy

Page 67: Γλώσσα  C & Unix

Ανακατεύθυνση Εισόδου/Εξόδου και Γλώσσα C

Για να μπορούν τα προγράμματα σε γλώσσα C να χρησιμοποιούν τη δυνατό-τητα ανακατεύθυνσης εισόδου/εξόδου πρέπει να χρησιμοποιούν τις συναρτή-σεις εισόδου/εξόδου οι οποίες απευθύ-νονται στην πρότυπη είσοδο/έξοδο (stdin/stdout)

getchar(), putchar(), printf(), scanf()