Download - Γλώσσα C & Unix
![Page 1: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/1.jpg)
Γλώσσα C & Unix
Τμήμα Πληροφορικής, ΑΠΘB’ εξάμηνο
ΔιδάσκοντεςΝ. Βασιλειάδης, Επίκουρος Καθηγητής (θεωρία)Δ. Βράκας, Μεταδιδάκτορας (εργαστήριο)
lpis.csd.auth.gr/curriculum/C+Unix/UNCL202.html
![Page 2: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/2.jpg)
Δομή του Μαθήματος
Εισαγωγή στο Unix Σύντομη επανάληψη της Γλώσσας C
(δείκτες, δομές) Δυναμικές δομές δεδομένων Είσοδος/έξοδος σε αρχεία (υψηλού –
χαμηλού επιπέδου) Αλληλεπίδραση με Unix Προγραμματισμός κελύφους Unix Ανάπτυξη εφαρμογών σε C
![Page 3: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/3.jpg)
Εισαγωγή στο Unix
Γλώσσα C & Unix
![Page 4: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/4.jpg)
Ιστορική Αναδρομή (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](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/5.jpg)
Ιστορική Αναδρομή (2/3)
Τo UNIX εξελίχθηκε ραγδαία τη δεκαετία του 1970
Η σημαντικότερη στιγμή του είναι το 1979 με την κυκλοφορία της 7ης έκδοσης, που θεωρείται ο άμεσος πρόγονος των σύγχρονων συστημάτων UNIX.
![Page 6: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/6.jpg)
Ιστορική Αναδρομή (3/3)
Αρκετές εταιρίες το υιοθέτησαν και ανέπτυξαν τις δικές τους εκδόσεις. Sun Microsystems, Microsoft
Στα τέλη του 1980, η AT&T Bell labs η Sun Microsystems και η Microsoft ανέπτυξαν την 4η έκδοση του UNIX System V. Δημιουργία άλλων συμμαχιών για να
ανταγωνιστούν το System V και την επικράτηση στην αγορά.
Τελικά όλοι συμφώνησαν στην ανάπτυξη ενός κοινού πυρήνα
Κάθε εταιρία θα μπορούσε να προσθέτει επιπλέον χαρακτηριστικά στις δικές τις εκδόσεις
![Page 7: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/7.jpg)
Εκδόσεις του UNIX (1/2) Linux
Αρχικά μόνο για PC (όχι μόνο πλέον) ιδιαίτερα δημοφιλής γιατί διανέμεται δωρεάν υπάρχει μεγάλη κοινότητα από προγραμματιστές
που συνεχώς το επεκτείνουν και εκδίδουν νέες εκδόσεις και εφαρμογές.
Solaris Μετεξέλιξη του SunOS από την εταιρεία Sun
Microsystems η οποία κατέχει ένα μεγάλο μέρος στην αγορά σταθμών εργασίας (workstation)
SCO Unix: Santa Cruz Operation Βασίστηκε στο System V/386 για τον επεξεργαστή
80386 της Intel.
![Page 8: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/8.jpg)
Εκδόσεις του UNIX (2/2)
IRIX: Silicon Graphics HP-UX: Hewlett Packard True64 Unix: Compaq DEC ΑΙΧ: IBM A/UX: Apple
![Page 9: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/9.jpg)
Το UNIX Σήμερα
Ισχυρό, εύκαμπτο και προπάντων σταθερό λειτουργικό σύστημα
Χρησιμοποιείται από περίπου 20 εκατομμύρια υπολογιστές και 100 εκατομμύρια χρήστες σε ολόκληρο τον κόσμο.
![Page 10: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/10.jpg)
Παράγοντες Επιτυχίας
Σταθερότητα - αξιοπιστία Ελεύθερη διακίνηση του πηγαίου κώδικα και όχι
μόνο των εκτελέσιμων Μεγάλος αριθμός από utilities και προγράμματα
που αναπτύχθηκαν από τρίτους Δυνατότητες multitasking και multiuser Εξαιρετικές δυνατότητες για δικτύωση
υπολογιστών Η μεταφερσιμότητα (portability) του, που οφείλεται
στο γεγονός ότι το UNIX είναι εξ’ ολοκλήρου γραμμένο σε γλώσσα προγραμματισμού C και επομένως μπορεί πολύ εύκολα να κυκλοφορήσει έκδοση για οποιαδήποτε πλατφόρμα διαθέτει μεταγλωττιστή της γλώσσας C.
![Page 11: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/11.jpg)
Σύντομη Ιστορία της C (1/5)
Αναπτύχθηκε το 1969 - 1973 στα Bell Laboratories (Lucent Technologies) από τον Dennis Ritchie.
Είναι στενά συνδεδεμένη με το λειτουργικό σύστημα Unix όπου και αναπτύχθηκε, αφού τόσο το σύστημα όσο και τα περισσότερα προγράμματα που τρέχουν σ’ αυτό είναι γραμμένα σε C.
![Page 12: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/12.jpg)
Σύντομη Ιστορία της C (2/5)
Προέρχεται έμμεσα από την γλώσσα BCPL, η οποία οδήγησε αρχικά σε μια άλλη γλώσσα την B.
Η γλώσσα B χρησιμοποιήθηκε το 1969 για την συγγραφή του πρώτου συστήματος Unix στον υπολογιστή DEC PDP-7.
Πάνω σε αυτήν βασίστηκε ο Ritchie για τη δημιουργία της C.
![Page 13: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/13.jpg)
Σύντομη Ιστορία της C (3/5)
Κάποιες αλλαγές έγιναν 1977 - 1979, κατά την επίδειξη της ανεξαρτησίας του συστήματος Unix από αρχιτεκτονικές υπολογιστών.
Τότε εμφανίστηκε η πρώτη ευρέως διαθέσιμη περιγραφή της γλώσσας
Η αύξηση της δημοτικότητας των PC εκείνη την περίοδο οδήγησε στην διάδοση της γλώσσας και την εμφάνιση πολλών εφαρμογών αλλά και εκδόσεων της γλώσσας που δεν ήταν απόλυτα συμβατές μεταξύ τους.
![Page 14: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/14.jpg)
Σύντομη Ιστορία της C (4/5)
Tο 1983 συστάθηκε η επιτροπή ANSI X3J11 με σκοπό την προτυποποίηση της C
Πραγματοποιήθηκε το 1989 επιφέροντας μερικές επιπλέον αλλαγές στη γλώσσα.
Το πρότυπο ANSI C επέτρεψε τη δημιουργία μεταγλωττιστών ικανών να χειρίζονται το ίδιο σωστά όλα τα προγράμματα γραμμένα σε ANSI C
![Page 15: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/15.jpg)
Σύντομη Ιστορία της C (5/5)
Με την έλευση του αντικειμενοστρα-φούς προγραμματισμού δημιουρ-γήθηκε και η επέκταση της C με υποστήριξη αντικειμένων, η C++.
Σήμερα η C++ είναι μια από τις πιο διαδεδομένες γλώσσες ενσωματω-μένη σε ολοκληρωμένα εργαλεία ανάπτυξης εφαρμογών,
Π.χ. C++ Builder, Visual C++
![Page 16: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/16.jpg)
Έννοια multi-tasking
Multi-tasking θεωρούνται τα Λειτουργικά Συστήματα στα οποία ο χρήστης έχει τη δυνατότητα της παράλληλης εκτέλεσης πολλών διεργασιών
Οι χρονοβόρες διεργασίες δεν αναγκάζουν τον χρήστη να περιμένει την περάτωση τους σε περίπτωση που προκύψει κάτι επείγον
Η πολλαπλή εκτέλεση διεργασιών υλοποιείται με την τεχνική διαμοιρασμού-χρόνου (time-sharing).
Οι διεργασίες εκτελούνται κυκλικά για ένα μικρό προκαθορισμένο χρονικό διάστημα, μέχρι να περατωθούν.
![Page 17: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/17.jpg)
Έννοια multi-user
Multi-User Λειτουργικά Συστήματα ονομάζονται αυτά, που υποστηρίζουν πολλαπλούς χρήστες, οι οποίοι μπορούν να εργάζονται ταυτόχρονα.
![Page 18: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/18.jpg)
Επιθυμητές ιδιότητες Διαμόρφωση του περιβάλλοντος εργασίας για
κάθε χρήστη ξεχωριστά Ασφάλεια (privacy) των ιδιωτικών δεδομένων Μεταφερσιμότητα (portability)
Ο χρήστης δουλεύει στο ίδιο περιβάλλον και έχει πρόσβαση στα αρχεία του, με τον ίδιο τρόπο ανεξάρτητα από τον Η/Υ στον οποίο εργάζεται.
Επικοινωνία μεταξύ των χρηστών του συστήματος
Ανταλλαγής δεδομένων μεταξύ των χρηστών Οικονομία
Κοινή χρήση διαθέσιμου λογισμικού και υλικού (εκτυπωτές, σαρωτές κ.τ.λ.) από πολλούς χρήστες.
![Page 19: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/19.jpg)
Υλοποίηση multi-user στο UNIX
Λογαριασμοί (accounts) Οι λογαριασμοί ξεχωρίζουν μεταξύ τους με
τα login names (ή user names). Password Κατάλογος στο Σύστημα Αρχείων του
Λειτουργικού Συστήματος (home directory) Eπιτυχής είσοδος (log on)
Το UNIX «διαβάζει» ορισμένα αρχεία που βρίσκονται στον προσωπικό του κατάλογο ώστε να προσαρμόσει το περιβάλλον εργασίας στις ανάγκες του χρήστη.
![Page 20: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/20.jpg)
Administrator
Ο λογαριασμός του Διαχειριστή του Συστήματος (Administrator ή root) έχει απεριόριστες δυνατότητες στο σύστημα
Δυνατότητα δημιουργίας και κατάργησης άλλων λογαριασμών
![Page 21: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/21.jpg)
Η Δομή του UNIX
Ε φ α ρ μ ο γ έ ς
Κ έ λ υ φ ο ς
Π υ ρ ή ν α ς
H a r d w a r e
![Page 22: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/22.jpg)
Πυρήνας (kernel)
Το τμήμα που αλληλεπιδρά άμεσα με το υλικό (hardware) του συστήματος.
Επικοινωνεί με όλες τις συσκευές του υπολογιστή
Παρέχει στο κέλυφος ένα σύνολο από απλές εντολές π.χ. άνοιξε αρχείο
Το κέλυφος δεν χρειάζεται να γνωρίζει λεπτομέρειες για το συγκεκριμένο υλικό.
![Page 23: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/23.jpg)
Κέλυφος (shell)
Παίζει το ρόλο του διαμεσολαβητή ανάμεσα στον πυρήνα και στο χρήστη ή στις εφαρμογές
Ο χρήστης πληκτρολογεί εντολές στο κέλυφος Αυτό είναι υπεύθυνο για την μετάφραση και την
προώθηση τους σε κατάλληλη μορφή στον πυρήνα. Το κέλυφος υπάρχει γιατί οι εντολές που
χρησιμοποιεί ο πυρήνας είναι χαμηλού επιπέδου Θα ήταν ιδιαίτερα δύσκολο και άβολο για τον
χρήστη να εργάζεται με αυτές.
![Page 24: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/24.jpg)
Εφαρμογές (applications)
Προγράμματα τα οποία έχουν γραφεί σε γλώσσες προγραμματισμού (π.χ. C) ή στο ίδιο το κέλυφος και επιτελούν ορισμένες σύνθετες λειτουργίες. Απλά: π.χ. αριθμομηχανή (calculator) Σύνθετα: π.χ. πρόγραμμα μηχανοργάνωσης
μιας επιχείρησης Οι εφαρμογές επικοινωνούν με το κέλυφος
για να διαβιβάσουν σε αυτό τις κατάλληλες εντολές.
![Page 25: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/25.jpg)
Σύστημα Αρχείων (File System)
Το σύστημα αρχείων του UNIX αποτελεί μια λογική μέθοδο οργάνωσης, αποθήκευσης, αναζήτησης και διαχείρισης δεδομένων.
Τα αρχεία είναι δομημένα σε μια ιεραρχία από καταλόγους για εύκολη αναζήτηση.
H έννοια του αρχείου είναι διευρυμένη Σαν αρχεία αντιμετωπίζονται όλα τα
συστατικά του συστήματος, ακόμη και οι υλικές συσκευές, όπως οι εκτυπωτές και οι σκληροί δίσκοι.
![Page 26: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/26.jpg)
Case sensitiveness
Στο UNIX οι χαρακτήρες που αντιστοιχούν στα πεζά γράμματα θεωρούνται διαφορετικοί από τους αντίστοιχους των κεφαλαίων γραμμάτων
input.txt, INPUT.TXT, Input.txt, input.TXT
![Page 27: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/27.jpg)
Τύποι Αρχείων
Κανονικά αρχεία (Ordinary files)
Σύνδεσμοι (links) ή hard links
Συμβολικοί σύνδεσμοι ή soft links
Κατάλογοι (Directories)
Ειδικά αρχεία (special files)
![Page 28: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/28.jpg)
Σύνδεσμοι (links) ή hard links
Παρέχουν τη δυνατότητα ύπαρξης πολλαπλών αντιγράφων ενός αρχείου σε διαφορετικούς υποκαταλόγους του ίδιου φυσικού μέσου.
Τα αντίγραφα υλοποιούνται μόνο σε λογικό επίπεδο.
Δεν δημιουργούνται πραγματικά αντίγραφα απλά σύνδεσμοι που ανακατευθύνουν οποιαδήποτε εντολή πάνω στον σύνδεσμο στο πραγματικό αρχείο.
![Page 29: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/29.jpg)
Συμβολικοί σύνδεσμοι ή soft links
Σύνδεσμοι οι οποίοι μπορούν να αναφέρονται και σε υποκαταλόγους αλλά και σε αρχεία διαφορετικών φυσικών μέσων αποθήκευσης
Μπορούν να αναφέρονται και σε αρχεία που βρίσκονται σε διαφορετικούς Η/Υ στο τοπικό δίκτυο ή ακόμη και σε απομακρυσμένα δίκτυα (π.χ μέσω του Διαδικτύου).
![Page 30: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/30.jpg)
Κατάλογοι (Directories)
Αρχεία, τα οποία τα χειρίζεται διαφορετικά το λειτουργικό σύστημα
Περιέχουν πληροφορίες για τα αρχεία και τους υποκαταλόγους ενός καταλόγου
Π.χ. ονόματα, μεγέθη, χαρακτηριστικά (attributes), δικαιώματα πρόσβασης κ.τ.λ.
![Page 31: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/31.jpg)
Ειδικά αρχεία (special files)
Βρίσκονται στον κατάλογο /dev/ Παρέχουν τη σύνδεση με όλες τις
συσκευές του Η/Υ Π.χ. /dev/fd0 ή /dev/mouse κ.τ.λ.
Το UNIX επιτρέπει στο χρήστη να αντιμετωπίζει όλες τις συσκευές σαν αρχεία
Π.χ. μπορεί κάποιος να αντιγράψει αρχεία στο αρχείο που αντιστοιχεί στον εκτυπωτή και αυτά να εκτυπωθούν κ.τ.λ.
![Page 32: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/32.jpg)
Διεργασίες
Μια διεργασία είναι ένα στιγμιότυπο ενός προγράμματος που εκτελείται από το λειτουργικό σύστημα.
Η σχέση μεταξύ προγραμμάτων και διεργασιών δεν είναι 1 προς 1,
Η εκτέλεση ενός προγράμματος μπορεί να προκαλέσει την δημιουργία πολλών διεργασιών.
![Page 33: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/33.jpg)
Διεργασίες στο UNIX
Το UNIX είναι ένα πολυδιεργαστικό (multi tasking) λειτουργικό σύστημα
Ταυτόχρονη εκτέλεση πολλαπλών διεργασιών
Οι ενεργές διεργασίες στο UNIX δεν εκτελούνται πραγματικά ταυτόχρονα, Ο αριθμός τους είναι πολύ μεγαλύτερος
από τον αριθμό των επεξεργαστών του Η/Υ
Στα κοινά συστήματα = 1
![Page 34: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/34.jpg)
Χρονικός Διαμοιρασμός (Time sharing)
Συναντάται πολύ συχνά στα πολυδιεργαστικά λειτουργικά συστήματα.
Ο επεξεργαστής αφιερώνει ένα προκαθορισμένο χρονικό διάστημα για κάθε διεργασία Στη συνέχεια αναλαμβάνει την επόμενη στη
σειρά διεργασία Όταν μία διεργασία περατωθεί ή
ακυρωθεί, αφαιρείται από τη λίστα των διεργασιών Ο επεξεργαστής συνεχίζει με τις υπόλοιπες
![Page 35: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/35.jpg)
Εκτέλεση στο Προσκήνιο
Όταν ο χρήστης ζητήσει την εκτέλεση ενός προγράμματος, πληκτρολογώντας το όνομα του στη γραμμή εντολών, ο έλεγχος θα επανέλθει στη γραμμή εντολών μετά την περάτωση του προγράμματος
Οι διεργασίες που ξεκινούν με αυτό τον τρόπο λέγεται ότι εκτελούνται στο προσκήνιο (foreground) επειδή παρακρατούν τον έλεγχο του τερματικού μέχρι την περάτωση τους.
![Page 36: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/36.jpg)
Πολλαπλή Εκτέλεση Λειτουργιών σε Παραθυρικό Περιβάλλον
Σε ένα σύστημα UNIX με υποστήριξη γραφικών (Χ Windows) ο χρήστης μπορεί να έχει περισσότερα από ένα τερματικά ανοιχτά Ακόμη και αν κάποιο είναι δεσμευμένο
από μια εντολή που τρέχει στο προσκήνιο μπορεί να συνεχίσει να δουλεύει χρησιμοποιώντας κάποιο άλλο τερματικό.
![Page 37: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/37.jpg)
Εκτέλεση στο Παρασκήνιο
Όταν δεν υπάρχει παραθυρικό περιβάλλον η δυνατότητα ταυτόχρονης εκτέλεσης πολλών διεργασιών παρέχεται μέσω της εκτέλεσης διεργασιών στο παρασκήνιο (background).
Μια διεργασία που εκτελείται στο παρασκήνιο χρησιμοποιεί το τερματικό μόνο όταν χρειάζεται να τυπώσει κάποιο μήνυμα ή να δεχτεί είσοδο από το πληκτρολόγιο.
Στον υπόλοιπο χρόνο εκτελείται "σιωπηλά" και το τερματικό παραμένει ελεύθερο για νέες εντολές.
![Page 38: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/38.jpg)
Δαίμονες (daemons)
Με την εκκίνηση δημιουργούνται διεργασίες του παρασκηνίου Μένουν ενεργές καθ' όλη τη διάρκεια λειτουργίας
του συστήματος Εκτελούν εργασίες ζωτικής σημασίας.
Ονομάζονται δαίμονες H διαχείριση τους γίνεται από τον
διαχειριστή (administrator) Συνήθεις δαίμονες: εκτύπωση (lpd),
ηλεκτρονικό ταχυδρομείο (maild), δικτυακές υπηρεσίες (telnetd, ftpd) κ.α.
![Page 39: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/39.jpg)
Δικαιώματα Αρχείων και Καταλόγων
To UNIX είναι ένα multi-user λειτουργικό σύστημα Το χρησιμοποιούν πολλοί χρήστες.
Οι χρήστες επιθυμούν δύο πράγματα που αφορούν τα δεδομένα τους: α) να προστατεύονται από τους
υπόλοιπους χρήστες του συστήματος (Ιδιωτικότητα των δεδομένων) και
β) να μπορούν να τα μοιράζονται με όποιους χρήστες επιθυμούν οι ίδιοι, κάτω από απόλυτα ελεγχόμενες συνθήκες.
![Page 40: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/40.jpg)
Δικαιώματα Αρχείων και Καταλόγων
Τα δικαιώματα (permissions) καθορίζουν:Ποιοι έχουν δικαίωμα πρόσβασης
σε κάποιο αρχείο ή σε κάποιο κατάλογο
Τι ακριβώς μπορούν να κάνουν με αυτό το αρχείο ή τον κατάλογο.
![Page 41: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/41.jpg)
Χαρακτηριστικά (attributes)
Για κάθε αρχείο (και κατάλογο) υπάρ-χουν χαρακτηριστικά που καθορίζουν τα δικαιώματα χρήσης του: Ο ιδιοκτήτης (owner) του αρχείου Η ομάδα (group) χρηστών στην οποία
ανήκει το αρχείο Τα δικαιώματα του ιδιοκτήτη Τα δικαιώματα της ομάδας Τα δικαιώματα των υπόλοιπων
χρηστών του συστήματος
![Page 42: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/42.jpg)
Ιδιοκτήτης Αρχείου (owner)
Συνήθως ο χρήστης που το δημιούργησε
Υπάρχει η δυνατότητα να αλλάξει ο ιδιοκτήτης
Είναι ο μόνος (από τους απλούς χρήστες) που μπορεί να τροποποιήσει τα δικαιώματα χρήσης
![Page 43: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/43.jpg)
Ομάδες Χρηστών
Οι ομάδες δίνουν τη δυνατότητα σε κάποιους χρήστες να μοιράζονται κάποια αρχεία Μπορεί να δουλεύουν μαζί σε κάποια
εργασία-πρόγραμμα
Μπορεί να απαγορευτεί η πρόσβαση αρχείων σε χρήστες που δεν ανήκουν στην ίδια ομάδα
![Page 44: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/44.jpg)
Επικοινωνία στο UNIX
Το UNIX υποστηρίζει πολλαπλούς χρήστες Μπορούν να χρησιμοποιούν (ακόμη και
ταυτόχρονα) τους διαθέσιμους πόρους του συστήματος
Η επικοινωνία μεταξύ των χρηστών είναι μία επιθυμητή ιδιότητα
Το UNIX διαθέτει ένα σημαντικό αριθμό από εντολές, που υλοποιούν αυτήν την επικοινωνία.
![Page 45: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/45.jpg)
Κελύφη (command shells)
Στο UNIX συνήθως ο χρήστης αιτείται την εκτέλεση εντολών Π.χ. εντολή ls για να δει τα αρχεία του
τρέχοντος καταλόγου
Τις αιτήσεις του χρήστη (δηλαδή τις εντολές που πληκτρολογεί) τις δέχεται το τμήμα του λειτουργικού που ονομάζεται κέλυφος (shell).
![Page 46: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/46.jpg)
Κελύφη (command shells)
Το κέλυφος μεταβιβάζει τις εντολές στον πυρήνα του UNIX Αποσυνθέτει τις εντολές στα στοιχειώδη μέρη
τους Μεταφράζει τις εντολές σε γλώσσα κατανοητή
από τον πυρήνα Ο πυρήνας επιστρέφει τα αποτελέσματα στο
κέλυφος Όταν τελειώσει την εκτέλεση
Το κέλυφος εμφανίζει τα αποτελέσματα στο χρήστη Σε μορφή κατανοητή από αυτόν
![Page 47: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/47.jpg)
Διάφορα Κελύφη
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](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/48.jpg)
Είσοδος και έξοδος από το Σύστημα
Κάθε φορά που ένας χρήστης κάνει login εκτελείται αυτόματα ένα κέλυφος (συνήθως το sh) από το λειτουργικό σύστημα login shell
Το κέλυφος που εκτελείται κατά την είσοδο καθορίζεται από το αρχείο /etc/passwd Περιέχει όλες τις πληροφορίες που χρειάζεται το
UNIX για τους χρήστες του συστήματος Π.χ. login names, passwords, login shells, home
directories κ.α.
![Page 49: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/49.jpg)
Είσοδος και έξοδος από το Σύστημα
Το sh εκτελεί τις εντολές που περιέχονται στο αρχείο ".profile" Στο home directory του χρήστη
Στη συνέχεια το κέλυφος τυπώνει ένα σύμβολο Έτοιμο για να δεχτεί εντολές. prompt (=προτροπή)
Η έξοδος από το κέλυφος σημαίνει έξοδο από το UNIX exit - logout - CTRL-D
![Page 50: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/50.jpg)
Ανακατεύθυνση Εισόδου και Εξόδου
To UNIX χειρίζεται τα αρχεία με γενικό τρόπο
Με ευκολία καθορίζονται: Η πηγή από την οποία παίρνει είσοδο μία
εντολή Το μέσο (αρχείο, οθόνη, συσκευή) στο
οποίο θα σταλούν τα αποτελέσματα της Η ευελιξία οφείλεται στην αρχή της
προκαθορισμένης εισόδου και εξόδου (standard input & standard output ή standard I/O)
![Page 51: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/51.jpg)
Προκαθορισμένη είσοδος & Προκαθορισμένη έξοδος
Όλα τα προγράμματα κάνουν χρήση 2 καναλιών για να δέχονται δεδομένα και να εξάγουν τα αποτελέσματα τους
Οι εντολές και τα προγράμματα δε χρειάζεται να ξέρουν τι είναι συνδεδεμένο στις άκρες των δύο καναλιών
Τον έλεγχο των μέσων που συνδέονται στα κανάλια τον αναλαμβάνει το κέλυφος Ο χρήστης μπορεί να τροφοδοτεί τα προγράμμα-
τα με δεδομένα που προέρχονται από αρχεία, το πληκτρολόγιο ή άλλα προγράμματα
Το ίδιο ισχύει και για την έξοδο
![Page 52: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/52.jpg)
Προκαθορισμένη είσοδος & έξοδος στο UNIX
ΠρόγραμμαΚανάλι εισόδου Κανάλι εξόδου
Πληκτρολόγιο
Οθόνη
Αρχείο Πρόγραμμα Αρχείο Πρόγραμμα
![Page 53: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/53.jpg)
Ανακατεύθυνση Εισόδου-Εξόδου
Το κέλυφος έχει 3 τρόπους για να αλλάξει την συνηθισμένη ροή των δεδομένων σε ένα πρόγραμμα:Ανακατεύθυνση εισόδου Ανακατεύθυνση εξόδου Σωλήνωση εντολών
![Page 54: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/54.jpg)
Ανακατεύθυνση Εισόδου
Το κέλυφος αλλάζει το μέσο από το οποίο το πρόγραμμα τροφοδοτείται με δεδομένα.
By default, το πρόγραμμα δέχεται είσοδο από το πληκτρολόγιο (προκαθορισμένη μονάδα εισόδου)
Για να αλλάξουμε την είσοδο ενός προγράμματος, μετά το όνομα της εντολής πληκτρολογούμε τον χαρακτήρα "<" και στη συνέχεια το όνομα του μέσου που θα χρησιμοποιήσουμε για είσοδο.
![Page 55: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/55.jpg)
Ανακατεύθυνση Εισόδου - Παράδειγμα
cat < file.txt Θα εκτελέσει την εντολή cat, η
οποία θα πάρει ως είσοδο τα περιεχόμενα του αρχείου file.txt και θα τα τυπώσει στην οθόνη Η εντολή cat (χωρίς ορίσματα) θα
περίμενε από το χρήστη να πληκτρολογήσει το κείμενο του στο πληκτρολόγιο (προκαθορισμένη είσοδος) και στη συνέχεια θα το τύπωνε στην οθόνη (προκαθορισμένη έξοδος).
![Page 56: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/56.jpg)
Ανακατεύθυνση Εξόδου
Το κέλυφος αλλάζει το μέσο στο οποίο κατευθύνεται η έξοδος του προγράμματος (αποτελέσματα)
By default, το κέλυφος στέλνει τα αποτελέ-σματα όλων των προγραμμάτων στην οθόνη του υπολογιστή (ή του τερματικού).
Για να αλλάξουμε την έξοδο ενός προγράμματος, μετά το όνομα του προγράμματος πληκτρολογούμε τον χαρακτήρα ">" και το όνομα του μέσου που θα χρησιμοποιήσουμε για έξοδο.
![Page 57: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/57.jpg)
Ανακατεύθυνση Εξόδου - Παράδειγμα
ls > alpha.txt Θα παράγει μια λίστα με τα αρχεία του
τρέχοντος καταλόγου και θα την αποθηκεύσει στο αρχείο alpha.txt Αν το αρχείο alpha.txt δεν υπάρχει, τότε
δημιουργείται Αν υπάρχει, τα περιεχόμενα του διαγράφονται
και τη θέση τους παίρνουν τα αποτελέσματα της ls
Χρήση του ">>" Αν το αρχείο υπάρχει, τα νέα δεδομένα
προστίθενται στο τέλος του αρχείου
![Page 58: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/58.jpg)
Ταυτόχρονη Ανακατεύθυνση Εισόδου και Εξόδου
sort < input.txt > output.txt Εισαγωγή κειμένου από το κανάλι
εισόδου Περιεχόμενα αρχείου input.txt
Αλφαβητική ταξινόμηση από την sort Αποστολή ταξινομημένου κειμένου
στο κανάλι εξόδου Αρχείο output.txt
![Page 59: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/59.jpg)
Σωλήνωση Εντολών
Με τη δυνατότητα αλλαγής εισόδου-εξόδου υπάρχει τρόπος σύνδεσης δύο εντολών, έτσι ώστε η μία να χρησιμοποιεί ως είσοδο την έξοδο της άλλης
![Page 60: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/60.jpg)
Σωλήνωση Εντολών - Παράδειγμα
Δημιουργία αρχείου inv_ls.txt με τη λίστα των αρχείων του τρέχοντος καταλόγου, ανάστροφα ταξινομημένα (από το z στο a).
1ο βήμα: Δημιουργία τη λίστας με τα αρχεία του τρέχοντος καταλόγου και αποθήκευση σε ένα προσωρινό αρχείο (π.χ. temp.txt).
ls –l > temp.txt
![Page 61: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/61.jpg)
Σωλήνωση Εντολών - Παράδειγμα
Για να ταξινομήσουμε το αρχείο temp.txt ανάστροφα θα χρησιμοποιήσουμε την εντολή sort με
παράμετρο -r (ανάστροφη ταξινόμηση) θα ανακατευθύνουμε την έξοδο της στο
αρχείο inv_ls.txt θα διαγράψουμε το προσωρινό αρχείο temp.txt
sort -r < temp.txt > inv_ls.txt rm temp.txt
![Page 62: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/62.jpg)
Σωλήνωση Εντολών - Παράδειγμα
Με έμμεσο τρόπο συνδέσαμε 2 εντολές (ls - sort) Η 2η έχει ως είσοδο την έξοδο της πρώτης
Το κέλυφος δίνει δυνατότητα άμεσης σύνδεσης εντολών Η έξοδος μιας εντολής χρησιμοποιείται ως
είσοδος για κάποια άλλη. Με τον χαρακτήρα "¦"
Χρήση ως εισόδου για την εντολή που βρίσκεται στο δεξιό τμήμα την έξοδο της εντολής που βρίσκεται στο αριστερό τμήμα.
ls -l ¦ sort -r > inv_ls.txt
![Page 63: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/63.jpg)
Κανάλι Σφαλμάτων
Εκτός από τα 2 κανάλια (προκαθορισμένης εισόδου και εξόδου) υπάρχει και 3ο κανάλι (κανάλι σφαλμάτων)
Το χρησιμοποιούν οι εντολές του UNIX και αρκετά προγράμματα για να τυπώνουν πιθανά μηνύματα σφαλμάτων που προκύπτουν κατά τη διάρκεια της εκτέλεσης
Όταν ανακατευθύνουμε την έξοδο ενός προγράμματος, ανακατευθύνουμε το κανάλι εξόδου μόνο και όχι και το κανάλι σφαλμάτων.
![Page 64: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/64.jpg)
Κανάλι Σφαλμάτων - Παράδειγμα
cat nofile.doc Αν το αρχείο nofile.doc δεν
υπάρχει στον τρέχοντα κατάλογο, θα πάρουμε το ακόλουθο μήνυμα στην οθόνη:
cat: cannot open nofile.doc Το μήνυμα εμφανίζεται στην οθόνη
μέσω του καναλιού σφαλμάτων και όχι μέσω του καναλιού εξόδου.
![Page 65: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/65.jpg)
Κανάλι Σφαλμάτων - Παράδειγμα
cat nofile.doc > dummy
cat: cannot open nofile.doc cat dummy
τίποτα Η cat ξανατύπωσε στην οθόνη το ίδιο
μήνυμα ενώ δεν έστειλε τίποτα στο κανάλι εξόδου (το αρχείο dummy είναι κενό).
![Page 66: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/66.jpg)
Κανάλι Σφαλμάτων - Ανακατεύθυνση
Το κέλυφος δίνει τη δυνατότητα ανακατεύθυνσης
Με τους χαρακτήρες "2>" cat nofile.doc 2> dummy cat dummy
cat: cannot open nofile.doc Το μήνυμα λάθους της εντολής cat δεν
τυπώθηκε στην οθόνη αλλά ανακατευθύνθηκε στο αρχείο dummy
![Page 67: Γλώσσα C & Unix](https://reader036.vdocuments.site/reader036/viewer/2022081503/56814340550346895dafb490/html5/thumbnails/67.jpg)
Ανακατεύθυνση Εισόδου/Εξόδου και Γλώσσα C
Για να μπορούν τα προγράμματα σε γλώσσα C να χρησιμοποιούν τη δυνατό-τητα ανακατεύθυνσης εισόδου/εξόδου πρέπει να χρησιμοποιούν τις συναρτή-σεις εισόδου/εξόδου οι οποίες απευθύ-νονται στην πρότυπη είσοδο/έξοδο (stdin/stdout)
getchar(), putchar(), printf(), scanf()