Διάλεξη 12: Πποσωπημένη Είζοδορ/Έξοδορ Χαμηλού Επιπέδος (Advanced Low-Level I/O) Κεθάλαιο 4 Stevens & Rago

Σχετικά έγγραφα
Διάλεξη 12: Προχωρημένη Είσοδος/Έξοδος Χαμηλού Επιπέδου (Advanced Low-Level I/O) Κεφάλαιο 4 Stevens & Rago

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

Constructors and Destructors in C++

ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΥΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

EL Eνωμένη στην πολυμορυία EL A8-0046/319. Τροπολογία

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΧΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Ενδεικτικά Θέματα Στατιστικής ΙΙ

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν.

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΧΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) FritzBox Fon WLAN Annex B ( )

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο:

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ

ΜΑΘΗΜΑ / ΤΑΞΗ : ΗΛΕΚΤΡΟΛΟΓΙΑ/Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08/09/2014

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

Ανάπηςξη Δθαπμογών ζε Ππογπαμμαηιζηικό Πεπιβάλλον

ΑΝΤΗΛΙΑΚΑ. Η Μηκή ζθέθηεθε έλαλ ηξόπν, γηα λα ζπγθξίλεη κεξηθά δηαθνξεηηθά αληειηαθά πξντόληα. Απηή θαη ν Νηίλνο ζπλέιεμαλ ηα αθόινπζα πιηθά:

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

(Ενδεικηικές Απανηήζεις) ΘΔΜΑ Α. Α1. Βιέπε απόδεημε Σει. 262, ζρνιηθνύ βηβιίνπ. Α2. Βιέπε νξηζκό Σει. 141, ζρνιηθνύ βηβιίνπ

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

Κινητός και Διάχυτος Υπολογισμός (Mobile & Pervasive Computing)

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

ΒΗΜΑ 2. Εηζάγεηε ηνλ Κωδηθό Πξόζβαζεο πνπ ιακβάλεηε κε SMS & δειώλεηε επηζπκεηό Όλνκα Πξόζβαζεο (Username) θαη ην ζαο

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

Γ ΣΑΞΖ ΔΝΗΑΗΟΤ ΛΤΚΔΗΟΤ ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΘΔΣΗΚΩΝ ΚΑΗ ΟΗΚΟΝΟΜΗΚΩΝ ΠΟΤΓΩΝ ΤΝΑΡΣΖΔΗ ΟΡΗΑ ΤΝΔΥΔΗΑ (έως Θ.Bolzano) ΘΔΜΑ Α

Σχεδίαση Γλωσσών & Μεταγλωττιστζς

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ. ΕΠΛ371 - Προγραµµατισµός Συστηµάτων

x x x x tan(2 x) x 2 2x x 1

Α Ο Κ Η Α Μ Α Ζ Η Η Ρ Η ( S E A R C H )

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

Άσκηση 1 - Μοπυοποίηση Κειμένου

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

ΠΛΗ36. Άσκηση 1. Άσκηση 2. Οη δηεπζύλζεηο ησλ 4 σλ ππνδηθηύσλ είλαη νη αθόινπζεο. Υπνδίθηπν Α: /27 Υπνδίθηπν Β:

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

ΟΣΑ Επηρεηξεζηαθή Ννεκνζύλε. Ελόηεηα: Ad1.2.2 «Ση θξύβεηαη» πίζω από κηα Επηρεηξεζηαθή Αλαθνξά (report): XML & XSD γηα αξράξηνπο

ΔΝΓΔΙΚΤΙΚΔΣ ΛΥΣΔΙΣ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ ΚΑΤΔΥΘΥΝΣΗΣ Γ ΛΥΚΔΙΟΥ ΓΔΥΤΔΡΑ 27 ΜΑΪΟΥ 2013

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γεσηέρα 10 Ηοσνίοσ 2019 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

Η επιζκόπηζη ηης έμμιζθης ενηολής ζηην Αλλοδαπή. Καηεξίλα Γαιαλνπνύινπ, Intellectual Property Manager, Microsoft Ειιάο Α.Ε.

Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο κόζηος ανά μονάδα παραγωγής. Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο ζηαθερό κόζηος ανά μονάδα παραγωγής

Οργάνωση και Δομή Παρουσιάσεων

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ. Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Έκδοζη /10/2014. Νέα λειηοσργικόηηηα - Βεληιώζεις

ΘΔΜΑ 1 ο Μονάδες 5,10,10

ΕΞΙΣΩΣΕΙΣ. Α. Πρωτοβάθμιεσ Εξιςώςεισ. Β. Διερεφνηςη Εξιςώςεων. 1x είναι αδφνατθ. x 1 x 1. Άλγεβρα Α Λυκείου

Αιγόξηζκνη Δθρώξεζε, Δίζνδνο θαη Έμνδνο ηηκώλ Γνκή αθνινπζίαο. Δηζαγσγή ζηηο Αξρέο ηεο Δπηζηήκεο ησλ Η/Υ

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη

Επωηήζειρ Σωζηού Λάθοςρ ηων πανελλαδικών εξεηάζεων Σςναπηήζειρ

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου. Λειτουργικά Συστήματα Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ

Ππογπαμμαηιζμόρ Ι (ΗΥ120)

Εργαστήριο Λειτουργικών Συστημάτων. File Systems

1 Είζοδορ ζηο Σύζηημα ΣΔΕΔ ή BPMS

Ηλεκηπονικά Απσεία και Διεπαθέρ

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

ΓΗΜΟΙΑ ΟΙΚΟΝΟΜΙΚΗ ΣΟΜΟ Γ

ηδάζθσλ: εµήηξεο Εετλαιηπνύξ

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ ΚΑΗ ΔΠΑΛ ΣΔΣΑΡΣΖ 25 ΜΑΨΟΤ 2016 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΑΡΥΔ ΟΗΚΟΝΟΜΗΚΖ ΘΔΧΡΗΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ - ΔΠΗΛΟΓΖ

Εγκατάσταση του πακέτου XAMPP. Β Τεχνική Σχολή Λεμεςοφ Σχολική χρονιά Άριςτοσ Παςιάσ

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2

Κεθάλαιο 7. Πξνζθνξά ηνπ θιάδνπ Μ. ΨΥΛΛΑΚΗ

Δηάιεμε 10: Λίζηεο Υινπνίεζε & Εθαξκνγέο

Δηζαγωγή ζηε γιώζζα C Παξνπζίαζε 3 ε : Δίζνδνο/ Έμνδνο - Σπλαξηήζεηο - Pointers

Αντισταθμιστική ανάλυση

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

Intel Accelerate Your Code

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

Transcript:

ΕΠΛ371 - Ππογπαμμαηιζμόρ Σςζηημάηων Διάλεξη 12: Πποσωπημένη Είζοδορ/Έξοδορ Χαμηλού Επιπέδος (Advanced Low-Level I/O) Κεθάλαιο 4 Stevens & Rago Δεκήηξεο Ζεϊλαιηπνύξ 12-1

Πεξηερόκελν Δηάιεμεο Σηελ πξνεγνύκελε δηάιεμε κειεηήζακε ηηο εμήο βαζηθέο θιήζεηο ζπζηήκαηνο γηα δηαρείξηζε αξρείωλ (open, creat, read, write, lseek, close) Σε απηή ηελ ελόηεηα ζα κειεηήζνπκε επηπιένλ δπλαηόηεηεο ηνπ ππό-ζπζηήκαηνο αξρείωλ ηνπ ππξήλα. Σςγκεκπιμένα θα μελεηήζοςμε A. Δηαρείξηζε Μέηα-πιεξνθνξίωλ Αξρείωλ (sys/stat.h) B. Δηαρείξηζε Αξρείωλ C. Δηαρείξηζε Καηαιόγωλ (dirent.h) D. Παξαδείγκαηα Φξήζεο 12-2

Μέηα-πιεξνθνξίεο Αξρείωλ Τν open, creat, read, write, lseek, close καο επηηξέπεη λα έρνπκε πξόζβαζε ζην πεπιεσόμενο απσείων. Τι γίνεηαι με ηιρ ςπόλοιπερ πληποθοπίερ; (όπωο π.ρ., απηέο πνπ επηζηξέθνληαη από ηελ ls al). δειαδή filesize, permissions, last modification date, owner, θηι.) Απηέο νη πιεξνθνξίεο νλνκάδνληαη Μέηα- Δεδνκέλα (Meta-data) ή ελαιιαθηηθά Μέηα- Πιεξνθνξίεο (Meta-information). Εδώ ζα κειεηήζνπκε πνπ απνζεθεύνληαη θαη πωο αλαθηώληαη. 12-3

Μέηα-πιεξνθνξίεο Αξρείωλ Πνπ απνζεθεύνληαη? Γλωξίδνπκε όηη ην inode (index node) είλαη κηα δνκή δεπηεξεύνπζαο κλήκεο ε νπνία θνξηώλεηαη ζηελ θύξηα κλήκε από ηνλ ππξήλα όηαλ αλνίγεη έλα αξρείν θαη ε νπνία πεξηέρεη δείθηεο ζηα πξαγκαηηθά δεδνκελα. Σηελ Μλήκε ππάξρεη έλα I-node Table ην νπνίν πεξηέρεη ηηο κέηα-πιεξνθνξίεο ηωλ αλνηθηώλ αξρείωλ. Πξόζβαζε ζε απηέο ηηο κέηα-πιεξνθνξίεο έρνπκε κέζω ηωλ εληνιώλ ζπζηήκαηνο stat/fstat/lstat. DISK RAM KERNEL inode Table USER A) stat ή open filename C) fstat() B) Load inode See next slide D) 12-4

Μέηα-πιεξνθνξίεο Αξρείωλ Πνπ απνζεθεύνληαη? H εληνιέο stat/fstat/lstat εθηππώλνπλ απηή ηελ πεξηνρή πιεξνθνξηώλ ελόο i-node Τα ππόινηπα έρνπλ ζρέζε κε ηελ αλάθηεζε ηωλ blocks πνπ πεξηέρνπλ ηελ ΕΠΛ πξαγκαηηθή 371 Ππογπαμμαηιζμόρ πιεξνθνξία Σςζηημάηων 12-5 ηνπ αξρείνπ.

Μέηα-πιεξνθνξίεο Αξρείωλ To system call Stat() Γηα πξόζβαζε ζηηο κέηα-πιεξνθνξίεο εθηεινύκε ηελ θιήζε ζπζηήκαηνο #include <sys/stat.h> int stat(char *path, struct stat *buf) Returns: -1=Error, 0=Success ε νπνία ζπκπιεξώλεη ηα πεδία ηεο δνκήο buf κε ηηο πιεξνθνξίεο πνπ είλαη θαηαρωξεκέλεο ζην i-node ηνπ θόκβνπ κε to όλνκα path Εάλ έρνπκε ήδε αλνίμεη ην αξρείν ηόηε ρξεζηκνπνηνύκε ηνλ file descriptor ηνπ αλνηθηνύ αξρείνπ κε ηελ εληνιή fstat. int fstat(int fd, struct stat *buf) Υπάξρεη θαη ε lstat ε νπνία ζα κειεηεζεί ζε ιίγν. 12-6

Μέηα-πιεξνθνξίεο Αξρείωλ Εθηειώληαο ηελ stat καο επηζηξέθεηε Τύπνο θαη Πεδίν Πεξηγξαθή ino_t st_ino Αξηζκόο I-Node nlink_t st_nlink κεηαμύ άιιωλ. (δείηε ην sys/stat.h γηα πεξηζζόηεξα) Αξηζκόο (ζθιεξώλ) ζπλδέζκωλ ζην αξρείν (π.ρ. ln oldfilename newfilename ζα απμήζεη ην nlink ηνπ oldfilename από 1 ζε 2) uid_t st_uid UNIX userid (ην ίδην κε απηό ζην /etc/passwd) gid_t st_gid UNIX groupid (ην ίδην κε απηό ζην /etc/passwd) off_t st_size Μέγεζνο Αξρείνπ ζε bytes (εάλ είλαη regular αξρείν) Τα πην θάηω είλαη ην πλήθορ δεςηεπολέπηων πνπ έρνπλ παξέιζεη από ηελ 1/1/1970. Μπνξνύκε λα ηα κνξθνπνηήζνπκε ζε κηα πην εύιεπηε κνξθή κε ηηο ζπλαξηήζεηο ηεο βηβιηνζήθεο time.h (ζπγθεθξηκέλα ctime) (δεο παξάδεηγκα 1 πην θάηω) time_t st_atime time of last access (of the file s inode) time_t st_mtime time of last data modification (of the file s content) time_t st_ctime time of last status change (of the file s inode) blksize_t st_blksize Σπληζηάκελν I/O Block γηα ην αληηθείκελν ην νπνίν κπνξεί λα δηαθέξεη κεηαμύ ζπζηεκάηωλ αξρείωλ (π.ρ., 4096 Bytes) mode_t st_mode Δηθαηώκαηα ΕΠΛ 371 Πξόζβαζεο Ππογπαμμαηιζμόρ Αξρείνπ Σςζηημάηων 12-7 (επόκελε δηαθάλεηα& παξάδεηγκα 2)

Μέηα-πιεξνθνξίεο Αξρείωλ To stat.st_mode κπνξεί λα αμηνπνηεζεί κε ηελ ρξήζε ησλ πην θάησ macros (ηα νπνία νξίδνληαη κέζα ζηελ sys/stat.h) S_ISLNK(st_mode) symbolic link S_ISREG(st_mode) regular file S_ISDIR(st_mode) directory S_ISCHR(st_mode) character device S_ISBLK(st_mode) block device S_ISFIFO(st_mode) fifo S_ISSOCK(st_mode) socket H sys/stat.h πεξηέρεη πνιιέο άιιεο ζηαζεξέο ηηο νπνίεο θαιείζηε λα κειεηήζεηε (man -s2 stat) 12-8

Παξάδεηγκα 1: mystat Να πινπνηήζεηε ζε C θαη κε ρξήζε θιήζεσλ ζπζηήκαηνο, έλα απιό πξόγξακκα ην νπνίν λα εθηππώλεη ηηο κέηα-πιεξνθνξίεο θάπνηνπ αξρείνπ ην νπνίν δίδεηαη ζαλ παξάκεηξνο. π.ρ../mystat /etc/passwd 12-9

Παξάδεηγκα 1: stat H εκηέλεζη ηης ενηολής stat ηοσ UNIX $ stat /etc/passwd Μέγεζνο Αξρείνπ ζε bytes du -b /etc/passwd DeviceID (see man s2 stat) File: `/etc/passwd' Size: 2005 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 67570 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2009-01-13 13:35:33.000000000 +0200 Modify: 2008-03-11 12:46:59.000000000 +0200 Change: 2008-03-11 12:46:59.000000000 +0200 Σπληζηάκελν Block Size // Access Inode // Change Data // Change Inode 12-10

Παξάδεηγκα 1: mystat #include <sys/stat.h> #include <unistd.h> // STDOUT_FILENO #include <stdio.h> // printf() #include <time.h> // ctime() int main(int argc, char *argv[]) { struct stat buf; printf("%s\n", argv[1]); if (stat(argv[1], &buf) < 0) { perror("lstat error"); exit(1); } } printf("+ I-Node: %li\n", buf.st_ino); printf("+ Size: %d\n", buf.st_size); printf("+ Hard Links: %d\n", buf.st_nlink); printf("+ User ID: %d\n", buf.st_uid); printf("+ Group ID: %d\n", buf.st_gid); printf("+ Last Content Access (atime): %s", ctime(&buf.st_atime)); printf("+ Last I-Node Change (ctime): %s", ctime(&buf.st_ctime)); printf("+ Last Content Change (mtime): %s", ctime(&buf.st_mtime)); printf("+ Preferred I/O Block: %d\n", buf.st_blksize); printf("+ Allocated Blocks: %d\n", buf.st_blocks); return 0; 12-11

Παξάδεηγκα 1: Eθηέιεζε mystat $./mystat /etc/passwd /etc/passwd + I-Node: 67570 + Size: 2005 + Hard Links: 1 + User ID: 0 + Group ID: 0 + Last Content Access (atime): Sat Jan 13 13:35:33 2009 + Last I-Node Change (ctime): Tue Mar 11 12:46:59 2008 + Last Content Change (mtime): Tue Mar 11 12:46:59 2008 + Preferred I/O Block: 4096 + Allocated Blocks: 8 $ls -ial /etc/passwd 67570 -rw-r--r-- 1 root root 2005 Mar 11 2008 /etc/passwd 12-12

Παξάδεηγκα 2: filetype Να πινπνηήζεηε ζε C θαη κε ρξήζε θιήζεσλ ζπζηήκαηνο, έλα απιό πξόγξακκα filetype ην νπνίν εθηππώλεη γηα θάζε αξρείν ην νπνίν δίδεηαη ζαλ παξάκεηξν, ηνλ ηύπν ηνπ αξρείνπ (regular, directory, ). π.ρ.,./filetype *./filetype /etc/passwd /etc /dev/initctl /dev/log /dev/tty /dev/cdrom 12-13

Παξάδεηγκα 2: filetype #include <sys/stat.h> // STAT related #include <unistd.h> // STDOUT_FILENO void printstat(struct stat *buf); int main(int argc, char *argv[]) { struct stat buf; int i; } for (i=1; i<argc; i++) { printf("%s:", argv[i]); if (lstat(argv[i], &buf) < 0) { perror("lstat error"); continue; } printstat(&buf); } return 0; void printstat(struct stat *buf) { char *ptr; if (S_ISREG(buf->st_mode)) ptr = "regular"; else if S_ISDIR(buf->st_mode) ptr = "directory"; else if S_ISCHR(buf->st_mode) ptr = "character special"; else if S_ISBLK(buf->st_mode) ptr = "block special"; else if S_ISFIFO(buf->st_mode) ptr = "fifo"; else if S_ISLNK(buf->st_mode) ptr = "symbolic link"; else if S_ISSOCK(buf->st_mode) ptr = "socket"; else ptr = "Unknown Mode"; printf("%s\n", ptr); } Γιαηί lstat ανηί stat? Σε πεξίπηωζε symbolic link καο ελδηαθέξνπλ ηα metadata ηος ίδιος ηος link (όηη ΕΠΛ είλαη 371 symbolic Ππογπαμμαηιζμόρ link δηλαδή) Σςζηημάηων θαη όρη ηνπ αξρείνπ ζην νπνίν δείρλεη ην link Πεξηζζόηεξα ζηε ζπλέρεηα 12-14

Παξάδεηγκα 1: Εθηέιεζε filetype Απνηέιεζκα Εθηέιεζεο $ # Σεκεηώζηε όηη ην /dev/cdrom είλαη symbolic link ζην /dev/hda. $ls -al /dev/cdrom lrwxrwxrwx 1 root root 8 Feb 10 2003 /dev/cdrom -> /dev/hda $./filetype /etc/passwd /etc /dev/initctl /dev/log /dev/tty /dev/cdrom /dev/hda /etc/passwd:regular /etc:directory /dev/initctl:fifo /dev/log:socket /dev/tty:character special /dev/cdrom:symbolic link /dev/hda:block special 12-15

Η Κιήζε Σπζηήκαηνο rename() int rename (char *oldpath, char *newpath) Returns: -1=Error, 0=Success Μεηνλνκάδεη ηνλ θόκβν κε ην όλνκα oldpath ζε newpath. Οπζηαζηηθά ε ηξνπνπνίεζε γίλεηαη κέζα ζην directory block ην νπνίν πεξηέρεη ην inode+όλνκα ηνπ αξρείνπ Αιιαγή ζην inode κόλν Τν rename δνπιεύεη γηα νπνηαδήπνηε αξρεία (θαη θαηαιόγνπο) είηε δίδνληαη κε ζρεηηθή ή κε απόιπηε δηεύζπλζε. 12-16

Η Κιήζε Σπζηήκαηνο chmod() int chmod (char *path, int mode) Returns: -1=Error, 0=Success Manipulate File Descriptor Αιιάδεη ηα δηθαηώκαηα πξνζηαζίαο ηνπ θόκβνπ κε όλνκα path ζε απηά πνπ πεξηγξάθνληαη από ην mode θαηά ηνλ γλσζηό ηξόπν (ζηαζ. S_Ixxxx ζηο fcntl.h ή ακέπαιο) Η αιιαγή γίλεηαη κέζα ζην inode όπσο θαίλεηαη πην θάησ Υπάξρεη θαη αληίζηνηρε θιήζε ζπζηήκαηνο fchmod, ε νπνία αληί γηα path περιμένει έλα file descriptor (πεξηγξαθέα αξρείνπ) mode 12-17

Οη Κιήζεηο Σπζηήκαηνο link() / unlink() #include <unistd.h> int link(char *oldpath, char *newpath) int unlink(char *path) Returns: -1=Error, 0=Success Η link δεκηνπξγεί έλα ζθιεξό ζύλδεζκν newpath ζην αξρείν FILE ην νπνίν έρεη όλνκα oldpath. Με απηό ηνλ ηξόπν ην FILE.st_nlink (πεδίν ηνπ INODE) απμάλεηαη θαηά έλα (δεο επόκελε δηαθάλεηα). H unlink δηαγξάθεη ηνλ ζθιεξό ζύλδεζκν. Οπζηαζηηθά απιά κεηώλεηαη θαηά έλα ν κεηξεηήο FILE.st_nlink Εάλ ν κεηξεηήο γίλεη ίζνο κε 0 ηόηε δηαγξάθνληαη ηα blocks ηνπ αξρείνπ FILE από ηελ δεπηεξεύνπζα κλήκε. 12-18

Οη Κιήζε Σπζηήκαηνο link() st_nlink st_nlink Αξηζηεξά δείρλνπκε ν αξρείν name1 κε inode #12345 (ην filename είλαη εληειώο αρξείαζην πιένλ!) ην νπνίν έρεη stat.st_nlink=1. Δεμηά δείρλνπκε ηελ πεξίπηωζε πνπ έρεη δεκηνπξγεζεί έλα hard link κέζω ηεο ln name name2 ή κέζω ηεο link(). Τώξα ηο stat.st_nlink=2. 12-19

Οη Κιήζεηο Σπζηήκαηνο symlink() / readlink() #include <unistd.h> int symlink(char *oldpath, char *newpath) int readlink(char *path, char *buf, int size) Returns: -1=Error, 0=Success and readline returns the final number of bytes read to buf. Η symlink δεκηνπξγεί έλα ζπκβνιηθό ζύλδεζκν από ηελ oldpath ζηελ newpath (όπσο ε ln s oldpath newpath). H readlink επηζηξέθεη ζην buf (κεγέζνπο size bytes), ην όλνκα ζην νπνίν δείρλεη ν ζπκβνιηθόο ζύλδεζκνο. oldpath -> newpath H ζπλάξηεζε readlink επηζηξέθεη ζαλ ηηκή εμόδνπ ηνλ αξηζκό ησλ bytes πνπ δηαβάζηεθαλ ζην buf. π.ρ. char buffer[20]; int size = 0; symlink("/tmp/crawler", "mycrawler"); size = readlink("mycrawler", &buffer, 20); buffer[size]='\0'; printf("%s %d\n", buffer, size); => Εθηππώλεη /tmp/crawler 12 12-20

Σπκβνιηθνί Σύλδεζκνη, symlink θαη stat.st_nlink Data Block DataBlock Δεμηά θαίλεηαη όηη ην dirb/name2 είλαη symbolic link ζην /dira/name1 (κέζω ηεο εληνιήο ``ln s /dira/name1 dirb/name2 ή symlink( /dira/name1, dirb/name2) Επεηδή ην symbolic link δεκηνπξγεί έλα λέν inode#13579 κε stat.st_nlink=1 Σημείωζη: Εάλ ζέινπκε ηηο πιεξνθνξίεο γηα ην inode ελόο symbolic link (θαη όρη ηνπ αξρείνπ ην νπνίν αλαθέξεηαη από ην link) δειαδή ηνπ inode#13579 αληί ηνπ inode#12345, ηόηε ρξεζηκνπνηνύκε: int lstat(char *path, struct stat *buf) Και OXI ηην int stat(char *path, struct stat *buf) 12-21

Δηαρείξηζε Καηαιόγωλ Οη Κιήζεηο Σπζηήκαηνο mkdir () / rmdir() #include <sys/stat.h> int mkdir (char *path, int mode) int rmdir(char *path) Returns: -1=Error, 0=Success H mkdir δεκηνπξγεί έλα λέν θαηάινγν κε όλνκα path θαη δηθαηώκαηα πξνζηαζίαο mode (π.ρ., rwx------ = 700) To path είλαη ζρεηηθό (π.ρ., tmp) ή απόιπην (π.ρ., /tmp/f1) Σεκεηώζηε όηη δηθαηώκαηα ηα νπνία δεν επιηρέπονηαι από ηελ ηξέρνπζα ηηκή ηνπ umask δε δίλνληαη ζηνλ θαηάινγν. Π.ρ. umask 022 => 755 (δειαδή ην umask πεξηνξίδεη ηελ εληνιή απηή) Επνκέλσο εάλ δώζνπκε 777 ηόηε ε umask ζα ζέζεη ηειηθά ηα permissions όπσο ηα ζέιεη. Η rmdir δηαγξαθεί ηνλ θαηάινγν κε ην όλνκα path, εθόζνλ ν θαηάινγνο είλαη θελόο. Ασηή η προϋπόθεζη σπάρτει για να μην μένοσν ηα blocks αρτείφν και ηα inodes ηοσς ορθανά! Έλα θνηλό ιάζνο είλαη λα δώζνπκε 600 (rw-) δηθαηώκαηα. Οη θαηάινγνη ρξεηάδνληαη ηνπιάρηζην (rwx) ζην USER, δειαδή 700. 12-22

Δηαρείξηζε Καηαιόγωλ Πξνζπέιαζε Καηαιόγωλ Τα πεξηερόκελα θαηαιόγσλ ηα νπνία πεξηέρνπλ κηα ιίζηα από (d_ino,d_name) κπνξνύλ λα πξνζπειαζζνύλ κέζσ ησλ ζσναρηήζεφν βιβλιοθήκης (όρη θιήζεηο ζπζηήκαηνο) opendir, readdir και closedir (ην d_name είλαη ζπλήζσο 255 chars) H πξόζβαζε ζε έλα θαηάινγν γίλεηαη κέζσ ελόο δείθηε DIR * (αλάινγνπ κε ηνλ FILE *) πνπ ρξεζηκνπνηείηαη ζηελ ζπλάξηεζε βηβιηνζήθεο stdio.h Ωζηόζν μόνο ο πσρήνας μπορεί να γράυει ζην πεξηερόκελν ελόο θαηαιόγνπ (ελ αληίζεζε κε ηα θνηλά αξρεία). Απηό ζπκβαίλεη γηα λα πξνζηαηέςεη ν ππξήλαο ηνλ ρξήζηε από ιάζε ηα νπνία ζα θαηαζηξέςνπλ ην δέλδξν θαηαιόγσλ d_ino d_name d_ino,d_name struct dirent 12-23

Δηαρείξηζε Καηαιόγωλ Πξνζπέιαζε Καηαιόγωλ Σεκεηώζηε όηη θάζε αξρείν θαηαιόγνπ πεξηέρεη ζηελ αξρή ηνπ dir block ηηο i-node δηεπζύλζεηο: «.» πθηζηάκελνπ θαηαιόγνπ θαη «..» πξνεγνπκέλνπ θαηαιόγνπ Απηό γίλεηαη γηα λα είλαη εθηθηή ε πινήγεζε πξνο ηα πάλσ ζην θαηάινγν ηνπ ππνζπζ. αξρείσλ 12-24

Πξνζπέιαζε Καηαιόγωλ Οη Κιήζεηο βηβιηνζήθεο opendir (), closedir(), readdir() #include <dirent.h> DIR *opendir (char *path) Returns: ΝULL=Error else pointer to DIR. int closedir(dir *dp) Returns: -1=Error, 0=Success H opendir αλνίγεη ηνλ θαηάινγν κε όλνκα path θαη επηζηξέθεη έλα δείθηε ζε DIR γηα ηελ πξόζβαζε ζηνλ θαηάινγν. Η closedir θιείλεη ηνλ θαηάινγν ην νπνίν έρεη αλνίμεη κέζσ ηνπ *dp #include <dirent.h> struct dirent *readdir (DIR *dp) Επηζηξέθεη έλα δείθηε ζε δνκή struct dirent πνπ αληηζηνηρεί ζην ηξέρνλ ζηνηρείν ηνπ πεξηερνκέλσλ ηνπ θαηαιόγνπ (από ηνλ δείθηε dp) Επηζηξέθεη NULL όηαλ δελ ππάξρνπλ άιια ζηνηρεία γηα δηάβαζκα. 12-25

Δηαρείξηζε Καηαιόγωλ Πξνζπέιαζε Καηαιόγωλ #include <unistd.h> int chdir(const char *path); και fchdir(int filedes) Return: -1=Error, 0=Success char *getcwd(char *buf, size_t size); Return: NULL=Error, buf=success Τν chdir επηηξέπεη ζε έλα πξόγξακκα λα αιιάμεη ηνλ ηξέρωλ θαηάινγν (όπωο ηελ εληνιή cd). O ηξέρνλ θαηάινγνο εδώ νξίδεηαη κέζα ζηηο εζωηεξηθέο δνκέο ηεο δηεξγαζίαο θαη δελ αλαθεξεηαη ζην «.» ηνπ inode. Γηα λα βξείηε ηνλ ηπέσων καηάλογο εθηειέζηε ηελ ζπλάξηεζε ζπζηήκαηνο getcwd. Η getcwd γξάθεη ην όλνκα ηνπ ηξέρωλ θαηαιόγνπ ζην buf (κεγέζνπο size) όπωο ε εληνιή readlink ποσ είδαμε προηγοσμένφς. Η getcwd νπζηαζηηθά αθνινπζεί ηα.. γηα λα πξνρσξήζεη αλαδξνκηθά κέρξη ηνλ θαηάινγν ξίδα / 12-26