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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Streams Input / Output in C++ George Kastrinis

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

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

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

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

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

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

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

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

./mydiz {-c -a -x -m -d -p -j} <archive-file> <list-of-files/dirs>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Περιεχόμενα. Πρόλογος... 21

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

ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Επανάληψη

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

Χώρος ονομάτων Τα ονόματα αρχείων δίνονται στο πλαίσιο ενός «χώρου ονομάτων» του συστήματος Ο χώρος είναι δομημένος ιεραρχικά διευκολύνει την ανάθεση μοναδικών ονομάτων διευκολύνει την διαχείριση πολλών αρχείων διευκολύνει τον έλεγχο πρόσβασης Κάθε επίπεδο ονομάζεται κατάλογος (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 εκτέλεση 7 ανάγνωση-γράψιμο-εκτέλεση Ξεχωριστά οκταδικά ψηφία για χρήστη-ομάδα-άλλους με αυτή την σειρά Πιο εύκολη προσθαφαίρεση αδειών chmod 755 fiename Προγραμματισμός 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 πέρα από το τέλος του Το αρχείο μπορεί να συρρικνωθεί/κοπεί, από το τέλος προς την αρχή αυτό πρέπει να γίνει ρητά δεν υπάρχει λειτουργία για το σβήσιμο/αποκοπή περιεχομένων από την αρχή ή το μέσο του αρχείου Προγραμματισμός 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 68 65 6C 6C o 6F w o r d \0 20 77 6F 72 6C 64 00 Προγραμματισμός 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 68 65 6C 6C 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 68 65 6C 6C o 6F w o r d \0 20 77 6F 72 6C 64 00 test 68 65 6C 6C 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 68 65 6C 6C o 6F w o r d \0 20 77 6F 72 6C 64 00 test 68 65 6C 6C 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 68 65 6C 6C o 6F w o r d \0 20 77 6F 72 6C 64 00 : - ) 20 3A 2D 29 /0 test 68 65 6C 6C 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 68 65 6C 6C o 6F w o r d \0 20 77 6F 72 6C 64 00 test 68 65 6C 6C 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); seek(fd,4,seek_end); write(fd,str,5); cose(fd); str h e 68 65 6C 6C o 6F w o r d \0 20 77 6F 72 6C 64 00 test 68 65 6C 6C 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); seek(fd,4,seek_end); write(fd,str,5); cose(fd); str h e 68 65 6C 6C o 6F w o r d \0 20 77 6F 72 6C 64 00 test 68 65 6C 6C 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); seek(fd,4,seek_end); write(fd,str,5); cose(fd); str h e 68 65 6C 6C o 6F : - ) d \0 20 3A 2D 29 6C 64 00 test 68 65 6C 6C 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); seek(fd,4,seek_end); write(fd,str,5); cose(fd); str h e 68 65 6C 6C o 6F : - ) d \0 20 3A 2D 29 6C 64 00 test 68 65 6C 6C 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); seek(fd,4,seek_end); write(fd,str,5); cose(fd); str h e 68 65 6C 6C o 6F : - ) d \0 20 3A 2D 29 6C 64 00 test 68 65 6C 6C 6F Προγραμματισμός II 35 ais@inf.uth.gr

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

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

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

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

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

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

Ερμηνεία δυαδικών δεδομένων τιμές σε hex 48 49 00 ascii '0' '1' ascii string '01' 0049 itte-endian short (2B) Προγραμματισμός 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); itte endian va 77 6F 77 21???? str? address space Προγραμματισμός 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 Προγραμματισμός 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 str????? 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); va 77 6F 77 21 w o w!? 77 6F 77 21 str? 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 va 77 6F 77 21 str 77 6F 77 21 00 test 77 6F 77 21 Προγραμματισμός II 48 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 va 77 6F 77 21 str 77 6F 77 21 00 test 77 6F 77 21 Προγραμματισμός II 49 ais@inf.uth.gr

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

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