Αρχεία. Προγραμματισμός II 1

Σχετικά έγγραφα
Αρχεία. Προγραμματισμός II 1

Βασικές λειτουργίες συστήματος πάνω σε αρχεία δεδομένων. Προγραμματισμός II 1

Αρχεία. Προγραμματισμός II 1

Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections)

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

Λειτουργικά Συστήματα (Λ/Σ)

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1

Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Λειτουργικό Σύστημα: διαχείριση πόρων. Διαχείριση αρχείων. Τι είναι ένα αρχείο ; Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Προγραμματισμός Ι (HY120)

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ. Χειρισμός Αρχείων. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Περιγραφείς Αρχείων & Ανακατεύθυνση EE. Προγραμματισμός II 1

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Δομημένος Προγραμματισμός

Λειτουργικά Συστήματα (Λ/Σ)

Προγραμματισμός συστημάτων UNIX/POSIX

Διάλεξη 18η: Διαχείρηση Αρχείων

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Σεπτέµβριος 2013

Προγραμματισμός Ι (ΗΥ120)

Διαδικασιακός Προγραμματισμός

Μεθόδων Επίλυσης Προβλημάτων

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Πληροφορική 2. Δομές δεδομένων και αρχείων

Δομημένος Προγραμματισμός

Streams Input / Output in C++ George Kastrinis

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1

Εργαστήριο 9: Αρχεία

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

Εισαγωγή στα Λειτουργικά Συστήματα (Λ/Σ) Το UNIX και οι εντολές του Παρουσίαση 3

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Αρχεία Δεδομένων. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

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

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τμήμα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήματα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 8ο Εργαστήριο

Διαδικασιακός Προγραμματισμός

Ενδεικτική περιγραφή μαθήματος

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

ΣΥΣΚΕΥΕΣ ΑΠΟΘΗΚΕΥΣΗΣ (ΜΝΗΜΗ)

Λιβανός Γιώργος Εξάμηνο 2017Β

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΠΡΟΒΛΗΜΑ ΕΠΕΓΕΡΓΑΣΙΑ. (Είναι οι σκέψεις και οι πράξεις που κάνουμε για να λυθεί το πρόβλημα) ΕΙΣΟΔΟΥ - ΕΞΟΔΟΥ

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Μερικές άλλες χρήσιμες εντολές

% ls -l /usr/bin/wc -rwxr-xr-x 1 root bin 7368 Jul /usr/bin/wc

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Αναπαράσταση Μη Αριθμητικών Δεδομένων

! Δεδομένα: ανεξάρτητα από τύπο και προέλευση, στον υπολογιστή υπάρχουν σε μία μορφή: 0 και 1

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

Διαδικασιακός Προγραμματισμός

FILE *fopen(const char *fname, const char *mode) void fclose(file *f) void fflush(file *f)

Βασικές Έννοιες της Πληροφορικής

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Αναπαράσταση Δεδομένων. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Εισαγωγή στην Πληροφορική

Λειτουργικά Συστήματα - Εργαστήριο 6. 6ο Εργαστήριο. Συμπίεση αρχείων Χρήση ειδικών χαρακτήρων στην γραμμή εντολών. Χρήστες και Ομάδες Χρηστών

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Διαδικασιακός Προγραμματισμός

Ανάπτυξη και Σχεδίαση Λογισμικού

S, (5, -3, 34, -23, 7) ( *, _

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΑΣΚΗΣΗ: ΔΙΑΧΕΙΡΙΣΗ ΚΑΤΑΛΟΓΟΥ ΑΡΧΕΙΩΝ ΕΝΟΣ DIRECTORY. Μέρος Α`

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δίκτυα Η/Υ στην Επιχείρηση

Transcript:

Αρχεία Προγραμματισμός II 1 ais@inf.uth.gr

Μόνιμη αποθήκευση δεδομένων Οι μεταβλητές και δομές δεδομένων ενός προγράμματος υπάρχουν στην μνήμη του Η/Υ Χάνονται όταν τερματιστεί το πρόγραμμα ή σβήσει ο Η/Υ (πιθανώς λόγω βλάβης) Χρειαζόμαστε μόνιμα αποθηκευτικά μέσα που λειτουργούν χωρίς παροχή ρεύματος μαγνητικά, οπτικά, soid-state, Σημείωση: και ο ίδιος ο κώδικας (sources, binaries) είναι δεδομένα που δεν θέλουμε να χάνονται κάθε φορά που σβήνουμε τον υπολογιστή Προγραμματισμός II 2 ais@inf.uth.gr

Πρόσβαση μέσων αποθήκευσης Η πρόσβαση στα μόνιμα αποθηκευτικά μέσα είναι μια σχετικά περίπλοκη υπόθεση καμία σχέση με το απλό μοντέλο της κυρίως μνήμης κάθε τεχνολογία έχει τις ιδιαιτερότητες της, και κάθε συσκευή μπορεί να απαιτεί διαφορετική διαχείριση Χρειάζεται ένα γενικό μοντέλο πρόσβασης ανεξάρτητου της τεχνολογίας που χρησιμοποιείται για την υλοποίηση μιας αποθηκευτικής συσκευής Επίσης χρειάζεται ελεγχόμενη πρόσβαση στις συσκευές αποθήκευσης, ώστε να παρέχεται προστασία/ασφάλεια των δεδομένων Προγραμματισμός II 3 ais@inf.uth.gr

Appications API κατάλληλη αφαίρεση; Προγραμματισμός II 4 ais@inf.uth.gr

Αρχεία Ξεχωριστές οντότητες αποθήκευσης δεδομένων Τα αρχεία είναι μόνιμα: εξακολουθούν να υφίστανται ακόμα και μετά τον τερματισμό των προγραμμάτων που τα δημιούργησαν/επεξεργάστηκαν συχνά, επιζούν πολύ παραπάνω και από τους υπολογιστές και τα προγράμματα μέσω των οποίων δημιουργήθηκαν Τα αρχεία είναι επώνυμα: κάθε αρχείο έχει «μοναδικό» όνομα/αναγνωριστικό για να μπορεί να εντοπιστεί αργότερα, είτε από το πρόγραμμα που το δημιούργησε είτε από άλλα προγράμματα, είτε από τον ίδιο τον χρήστη Προγραμματισμός II 5 ais@inf.uth.gr

Χώρος ονομάτων (name space) Τα ονόματα αρχείων δίνονται στο πλαίσιο ενός «χώρου ονομάτων» του συστήματος Ο χώρος είναι δομημένος ιεραρχικά διευκολύνει την ανάθεση μοναδικών ονομάτων διευκολύνει την διαχείριση πολλών αρχείων διευκολύνει τον έλεγχο πρόσβασης Κάθε επίπεδο ονομάζεται κατάλογος (directory) Η δομή αναπαρίσταται ως «ανεστραμμένο» δέντρο Η ρίζα (root) είναι στο ψηλότερο επίπεδο και αποτελεί την κορυφή της ιεραρχίας καταλόγων Τα αρχεία μπορεί να δημιουργηθούν/τοποθετηθούν σε οποιοδήποτε επίπεδο του χώρου ονομάτων Προγραμματισμός II 6 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf Προγραμματισμός II 7 ais@inf.uth.gr

Προσδιορισμός ονομάτων Απόλυτος προσδιορισμός, σε καθολικό επίπεδο πλήρες όνομα, με βάση την κορυφή της ιεραρχίας Σχετικός προσδιορισμός, σε τοπικό επίπεδο τμήμα ονόματος, με βάση τον κατάλογο εργασίας Συμβάσεις "." για τον τρέχοντα κατάλογο εργασίας ".." για τον κατάλογο που βρίσκεται ένα επίπεδο ψηλότερα από τον τρέχοντα κατάλογο εργασίας "/" για την ρίζα του δέντρου, αλλά και ως διαχωριστικό ανάμεσα στα ονόματα καταλόγων/αρχείων ενός μονοπατιού Προγραμματισμός II 8 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf όνομα: a1.pdf κατάλογος εργασίας αναφορά Προγραμματισμός II 9 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf όνομα: progii/a1.pdf κατάλογος εργασίας αναφορά Προγραμματισμός II 10 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf όνομα: progii/a1.pdf κατάλογος εργασίας αναφορά Προγραμματισμός II 11 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf όνομα: /users/profs/ais/progii/a1.pdf κατάλογος εργασίας αναφορά Προγραμματισμός II 12 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf όνομα: /users/profs/ais/progii/a1.pdf κατάλογος εργασίας αναφορά Προγραμματισμός II 13 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf όνομα:../progii/a1.pdf κατάλογος εργασίας αναφορά Προγραμματισμός II 14 ais@inf.uth.gr

/ users system profs ugrads grads bin incude ibs ais emkouts progii distrsys progii a1.pdf a1.pdf όνομα:../../grads/emkouts/progii/a1.pdf κατάλογος εργασίας αναφορά Προγραμματισμός II 15 ais@inf.uth.gr

Προστασία αρχείων / καταλόγων Για κάθε αρχείο / κατάλογο το λειτουργικό διατηρεί πληροφορία για τον ιδιοκτήτη του, καθώς και για τις άδειες πρόσβασης στο αρχείο Υποκείμενα αδειών: user, group, others Ξεχωριστές άδειες για κάθε υποκείμενο Όταν ένα πρόγραμμα επιχειρεί να προσπελάσει ένα αρχείο, το λειτουργικό ελέγχει την άδεια πρόσβασης αν ο χρήστης στο όνομα του οποίου εκτελείται το πρόγραμμα δεν έχει άδεια να προσπελάσει το αρχείο, η λειτουργία δεν εκτελείται Αλλαγές ιδιοκτησίας γίνονται μέσω chown / fchown Αλλαγές αδειών γίνονται μέσω chmod / fchmod Προγραμματισμός II 16 ais@inf.uth.gr

Προσδιορισμός αδειών με chmod Προσδιορισμός υποκειμένων u(ser) χρήστης/ιδιοκτήτης g(group) ομάδα o(thers) άλλοι a() όλοι Προσδιορισμός άδειας r(ead) ανάγνωση w(rite) γράψιμο/αλλαγή (e)x(ecute) εκτέλεση chmod u+rwx fiename chmod o+rx,o-w fiename Προγραμματισμός II 17 ais@inf.uth.gr

Οκταδική κωδικοποίηση αδειών read (octa 4) write (octa 2) execute (octa 1) 1 0 0 0 1 0 0 0 1 Προσδιορισμός άδειας 4 ανάγνωση 2 γράψιμο/αλλαγή 1 εκτέλεση Ξεχωριστά οκταδικά ψηφία για χρήστη-ομάδα-άλλους με αυτή την σειρά Πιο εύκολη προσθαφαίρεση αδειών chmod 755 fiename user group others Προγραμματισμός II 18 ais@inf.uth.gr

Περιορισμός αδειών μέσω umask Ο χρήστης μπορεί να μπλοκάρει συγκεκριμένες άδειες για τα αρχεία που δημιουργούνται από τα προγράμματα που εκτελεί, μέσω της μάσκας umask Η μάσκα ορίζεται μέσω της εντολής/λειτουργίας umask Κατά την εκτέλεση, γίνεται συνδυασμός των αδειών perms που δίνει ένα πρόγραμμα (μέσω της λειτουργίας open) με την μάσκα προστασίας του χρήστη perms & ~umask umask=077 μπλοκάρει όλες τις άδειες για g+o umask=022 μπλοκάρει την άδεια γραψίματος για g+o Προγραμματισμός II 19 ais@inf.uth.gr

Γράψιμο/διάβασμα δεδομένων σε/από αρχείο Τα bytes γράφονται/διαβάζονται σειριακά Η θέση εγγραφής/ανάγνωσης αυξάνεται αυτόματα όταν γράφονται/διαβάζονται bytes (κατά τον αριθμό των bytes που γράφτηκαν/διαβάστηκαν) Η θέση εγγραφής/ανάγνωσης μπορεί να αλλάξει (προς τα εμπρός ή πίσω) και με ρητό τρόπο Το αρχείο επεκτείνεται/μεγαλώνει αυτόματα, όταν γράφονται bytes πέρα από το τέλος του Το αρχείο μπορεί να συρρικνωθεί/κοπεί, από το τέλος προς την αρχή αυτό πρέπει να γίνει ρητά δεν υπάρχει λειτουργία για το σβήσιμο/αποκοπή περιεχομένων από την αρχή ή το μέσο του αρχείου Προγραμματισμός II 20 ais@inf.uth.gr

πρώτο byte θέση ανάγνωσης/εγγραφής τελευταίο byte περιεχόμενα αρχείου Προγραμματισμός II 21 ais@inf.uth.gr

Βασικές λειτουργίες αρχείων (1) int open(const char *path, int fags, mode_t perms) ανοίγει το αρχείο με όνομα path (αν συμπεριλαμβάνεται ένα μονοπάτι καταλόγων, αυτό πρέπει ήδη να υφίσταται) Η επιθυμητή πρόσβαση προσδιορίζεται μέσω fags Ο_RDONLY,Ο_WRONLY,Ο_RDWR: διάβασμα, γράψιμο, και τα δύο Ο_APPEND,Ο_TRUNC: προσθήκη στο τέλος, κόψιμο αρχείου Ο_CREAT: δημιουργία αρχείου, αν δεν υπάρχει ήδη Ο_EXCL: μαζί με Ο_CREAT, αποτυχία αν το αρχείο υπάρχει Οι άδειες πρόσβασης προσδιορίζονται μέσω perms οκταδική τιμή (π.χ. 0700) ή συμβολική σταθερά (π.χ. S_IRWXU) λαμβάνονται υπόψη μόνο όταν δημιουργείται ένα νέο αρχείο Προγραμματισμός II 22 ais@inf.uth.gr

Περιγραφείς αρχείων (fie descriptors) Σε περίπτωση επιτυχίας, η open επιστρέφει τον λεγόμενο περιγραφέα αρχείου (fie descriptor) Οι περιγραφείς αρχείων είναι ακέραιοι δεν υπάρχει ειδικός τύπος δεδομένων για αρχεία Ο περιγραφέας αρχείου που επιστρέφεται χρησιμοποιείται στην συνέχεια ως αναφορά (reference) στο αρχείο Όλες οι βασικές λειτουργίες αρχείων δέχονται ως παράμετρο έναν περιγραφέα αρχείου (ακέραιο) π.χ. μια ακέραια τιμή που επέστρεψε η open Περισσότερα για τους περιγραφείς αρχείων, αργότερα Προγραμματισμός II 23 ais@inf.uth.gr

Βασικές λειτουργίες αρχείων (2) ssize_t read(int fd, void *buf, size_t n) ανάγνωση δεδομένων από το αρχείο ssize_t write(int fd, void *buf, size_t n) εγγραφή δεδομένων στο αρχείο off_t seek(int fd, off_t pos, int whence) μετακίνηση θέσης ανάγνωσης/εγγραφής int ftruncate(int fd, off_t ength) κόψιμο/επέκταση του αρχείου int fsync(int fd) σύγχρονη αποθήκευση δεδομένων στον δίσκο int cose(int fd) κλείσιμο του περιγραφέα αρχείου Προγραμματισμός II 24 ais@inf.uth.gr

int fd; char str[]="heo word"; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,str,5); write(fd,&str[5],6); write(fd," :-)",4); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 ερμηνεία ως ASCII τιμή bytes στην μνήμη Προγραμματισμός II 25 ais@inf.uth.gr

int fd; char str[]="heo word"; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,str,5); write(fd,&str[5],6); write(fd," :-)",4); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 test Προγραμματισμός II 26 ais@inf.uth.gr

int fd; char str[]="heo word"; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,str,5); write(fd,&str[5],6); write(fd," :-)",4); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 test 6F Προγραμματισμός II 27 ais@inf.uth.gr

int fd; char str[]="heo word"; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,str,5); write(fd,&str[5],6); write(fd," :-)",4); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 test 6F 20 77 6F 72 6C 64 Προγραμματισμός II 28 ais@inf.uth.gr

int fd; char str[]="heo word"; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,str,5); write(fd,&str[5],6); write(fd," :-)",4); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 : - ) 20 3A 2D 29 /0 test 6F 20 77 6F 72 6C 64 20 3A 2D 29 Προγραμματισμός II 29 ais@inf.uth.gr

int fd; char str[]="heo word"; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,str,5); write(fd,&str[5],6); write(fd," :-)",4); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 test 6F 20 77 6F 72 6C 64 20 3A 2D 29 Προγραμματισμός II 30 ais@inf.uth.gr

seek(fd,(off_t)-3,seek_cur); read(fd,&str[6],3); ftruncate(fd,5); write(fd,str,5); cose(fd); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 test 6F 20 77 6F 72 6C 64 20 3A 2D 29 Προγραμματισμός II 31 ais@inf.uth.gr

seek(fd,(off_t)-3,seek_cur); read(fd,&str[6],3); ftruncate(fd,5); write(fd,str,5); cose(fd); str h e o 6F w o r d \0 20 77 6F 72 6C 64 00 test 6F 20 77 6F 72 6C 64 20 3A 2D 29 Προγραμματισμός II 32 ais@inf.uth.gr

seek(fd,(off_t)-3,seek_cur); read(fd,&str[6],3); ftruncate(fd,5); write(fd,str,5); cose(fd); str h e o 6F : - ) d \0 20 3A 2D 29 6C 64 00 test 6F 20 77 6F 72 6C 64 20 3A 2D 29 Προγραμματισμός II 33 ais@inf.uth.gr

seek(fd,(off_t)-3,seek_cur); read(fd,&str[6],3); ftruncate(fd,5); write(fd,str,5); cose(fd); str h e o 6F : - ) d \0 20 3A 2D 29 6C 64 00 test 6F 20 77 6F 72 6C 64 20 3A 2D 29 Προγραμματισμός II 34 ais@inf.uth.gr

seek(fd,(off_t)-3,seek_cur); read(fd,&str[6],3); ftruncate(fd,5); write(fd,str,5); cose(fd); str h e o 6F : - ) d \0 20 3A 2D 29 6C 64 00 fie position does NOT change! test 6F Προγραμματισμός II 35 ais@inf.uth.gr

seek(fd,(off_t)-3,seek_cur); read(fd,&str[6],3); ftruncate(fd,5); write(fd,str,5); cose(fd); str h e o 6F : - ) d \0 20 3A 2D 29 6C 64 00 test 6F 00 00 00 00 00 00 00 00 00 00 6F Προγραμματισμός II binary zero vaues 36 ais@inf.uth.gr

seek(fd,(off_t)-3,seek_cur); read(fd,&str[6],3); ftruncate(fd,5); write(fd,str,5); cose(fd); str h e o 6F : - ) d \0 20 3A 2D 29 6C 64 00 test 6F 00 00 00 00 00 00 00 00 00 00 6F Προγραμματισμός II 37 ais@inf.uth.gr

Προσοχή! Η read/write μπορεί να μην διαβάσει/γράψει όσα bytes ζήτησε ο προγραμματιστής αυτό δεν είναι (απαραίτητα) λάθος ή πρόβλημα Πρέπει να ελέγχεται η τιμή επιστροφής, και αν χρειαστεί να επαναληφθεί η κλήση ώστε να διαβαστούν/γραφτούν τα υπόλοιπα bytes Η write/cose δεν δίνει κάποιες εγγυήσεις σχετικά με την μονιμοποίηση/αποθήκευση των δεδομένων στον δίσκο το λειτουργικό κρατά δεδομένα σε «κρυφή» μνήμη και τα αποθηκεύει στο δίσκο ασύγχρονα/αργότερα γιατί; Η σύγχρονη αποθήκευση γίνεται(;) με fsync Προγραμματισμός II 38 ais@inf.uth.gr

Ερμηνεία περιεχομένων ενός αρχείου Το λειτουργικό σύστημα διαβάζει/γράφει bytes από/σε αρχεία χωρίς να τα ερμηνεύει Η σημασία/ερμηνεία των περιεχομένων ενός αρχείου είναι θέμα της εφαρμογής/χρήστη Χρειάζονται κατάλληλες συμβάσεις/πρότυπα κωδικοποίησης/ερμηνείας των δεδομένων Η τιμή ενός ή πολλών bytes μπορεί να ερμηνευθεί με πολλούς διαφορετικούς τρόπους Text fie: το περιεχόμενο του αρχείου πρέπει να ερμηνευθεί χρησιμοποιώντας την σύμβαση ASCII Binary fie: ένα αρχείο που δεν είναι (μόνο) text Προγραμματισμός II 39 ais@inf.uth.gr

Προγραμματισμός II 40 ais@inf.uth.gr

Ερμηνεία δυαδικών δεδομένων addresses get higher 30 31 00 τιμές σε hex ascii '0' '1' ascii string "01" 0049 itte-endian short (2B) Προγραμματισμός II 41 ais@inf.uth.gr

int fd,va=0x21776f77; char str[sizeof(int)+1]; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,&va,sizeof(int)); seek(fd,0,seek_set); read(fd,str,sizeof(int)); str[sizeof(int)]='\0'; cose(fd); itte endian va 77 6F 77 21???? addresses get higher str? Προγραμματισμός II 42 ais@inf.uth.gr

int fd,va=0x21776f77; char str[sizeof(int)+1]; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,&va,sizeof(int)); seek(fd,0,seek_set); read(fd,str,sizeof(int)); str[sizeof(int)]='\0'; cose(fd); va 77 6F 77 21 str????? test Προγραμματισμός II 43 ais@inf.uth.gr

int fd,va=0x21776f77; char str[sizeof(int)+1]; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,&va,sizeof(int)); seek(fd,0,seek_set); read(fd,str,sizeof(int)); str[sizeof(int)]='\0'; cose(fd); va 77 6F 77 21 str????? test 77 6F 77 21 Προγραμματισμός II 44 ais@inf.uth.gr

int fd,va=0x21776f77; char str[sizeof(int)+1]; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,&va,sizeof(int)); seek(fd,0,seek_set); read(fd,str,sizeof(int)); str[sizeof(int)]='\0'; cose(fd); va 77 6F 77 21 str????? test 77 6F 77 21 Προγραμματισμός II 45 ais@inf.uth.gr

int fd,va=0x21776f77; char str[sizeof(int)+1]; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,&va,sizeof(int)); seek(fd,0,seek_set); read(fd,str,sizeof(int)); str[sizeof(int)]='\0'; cose(fd); va 77 6F 77 21 w o w!? ερμηνεία ως ASCII 77 6F 77 21 str? τιμή bytes στην μνήμη test 77 6F 77 21 Προγραμματισμός II 46 ais@inf.uth.gr

int fd,va=0x21776f77; char str[sizeof(int)+1]; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,&va,sizeof(int)); seek(fd,0,seek_set); read(fd,str,sizeof(int)); str[sizeof(int)]='\0'; cose(fd); w o w! \0 ερμηνεία ως ASCII va 77 6F 77 21 str 77 6F 77 21 00 τιμή bytes στην μνήμη test 77 6F 77 21 Προγραμματισμός II 47 ais@inf.uth.gr

int fd,va=0x21776f77; char str[sizeof(int)+1]; fd=open("test",o_rdwr O_CREAT O_TRUNC,S_IRWXU); write(fd,&va,sizeof(int)); seek(fd,0,seek_set); read(fd,str,sizeof(int)); str[sizeof(int)]='\0'; cose(fd); w o w! \0 ερμηνεία ως ASCII va 77 6F 77 21 str 77 6F 77 21 00 τιμή bytes στην μνήμη test 77 6F 77 21 Προγραμματισμός II 48 ais@inf.uth.gr

Τύποι αρχείων Το λειτουργικό δεν διατηρεί πληροφορία τύπου για τα αρχεία που δημιουργούν τα προγράμματα ούτε ενδιαφέρεται να ερμηνεύσει τα περιεχόμενα τους Πληροφορία για τον τύπο ενός αρχείου προστίθεται, συνήθως κωδικοποιημένη στα περιεχόμενα του, από το πρόγραμμα που δημιουργεί το αρχείο Οι καταλήξεις αρχείων (π.χ.,.pdf) είναι απλά μια σύμβαση για πιο εύκολη αναζήτηση από τον χρήστη αυτή η σύμβαση είναι σε πιο ψηλό επίπεδο από το ΛΣ είναι απλά ενδεικτική για τα περιεχόμενα του αρχείου (αν ένα αρχείο ονομάζεται.pdf δεν σημαίνει ότι *είναι* pdf) Προγραμματισμός II 49 ais@inf.uth.gr

Απομάκρυνση αρχείου int unink(const char *path) καταργεί τον σύνδεσμο στο αρχείο Αν δεν υπάρχει άλλος σύνδεσμος σε αυτό το αρχείο, το αρχείο καθίσταται απροσπέλαστο και διαγράφεται όταν κλείσει και ο τελευταίος περιγραφέας σε αυτό Δημιουργία προσωρινού αρχείου που διαγράφεται όταν το πρόγραμμα τερματιστεί ή κλείσει τον περιγραφέα fd = open("tmp",o_rdwr O_CREAT O_EXCL,0077); unink("tmp"); cose(fd); Προγραμματισμός II 50 ais@inf.uth.gr

Καθιερωμένοι περιγραφείς αρχείων Υπάρχουν 3 συγκεκριμένοι περιγραφείς αρχείων, που έχουν καθιερωμένη/προκαθορισμένη χρήση Καθιερωμένη είσοδος (standard input) STDIN_FILENO (0) Καθιερωμένη έξοδος (standard output) STDOUT_FILENO (1) Καθιερωμένη έξοδος λαθών (standard error) STDERR_FILENO (2) Αντιστοιχούν (συνήθως) στην «συσκευή τερματικού» (tty) που χρησιμοποιεί ο χρήστης του προγράμματος 0 -> πληκτρολόγιο, 1,2 -> οθόνη αυτά δεν είναι (πραγματικά) αρχεία βλέπε αργότερα Προγραμματισμός II 51 ais@inf.uth.gr