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

Σχετικά έγγραφα
Διάλεξη 18η: Διαχείρηση Αρχείων

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

Επεξεργασία Αρχείων Κειµένου

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

ιαφάνειες παρουσίασης #6 (β)

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

Περιεχόµενα. Πρόλογος... 15

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

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

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

Εισαγωγή στον Προγραμματισμό

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

Κάθε πρόγραμμα έχει, κατ αρχήν, αντιστοιχίσει στο ρεύμα stdin το πληκτρολόγιο και στα ρεύματα stdout και stderr την οθόνη.

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

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

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

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

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

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

Αρχεία εδοµένων. Προγραµµατισµός Ι 1

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

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

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Η γλώσσα προγραμματισμού C Χειρισμός αρχείων

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

4ο σετ σημειώσεων - Χειρισμός αρχείων και structs

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Η γλώσσα C σε βάθος Κεφάλαιο 3: Προετοιµασία για αργότερα...61 Η C και η µνήµη...62 Ο τελεστής & Ο τελεστής sizeof Τρεις συναρτήσεις παρακ

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

Προγραμματισμός Υπολογιστών με C++

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

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

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

H ΓΛΩΣΣΑ C. Μάθηµα 15: Είσοδος/Έξοδος: Συναρτήσεις Εισόδου. ηµήτρης Ψούνης

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

C: Από τη Θεωρία στην Εφαρμογή

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

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Ασκήσεις - Μελέτες περίπτωσης για το μάθημα Προγραμματισμός II

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

Η γλώσσα προγραμματισμού C

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

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

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

Η γλώσσα προγραμματισμού C

scanf() scanf() stdin scanf() printf() int float double %lf float

Streams Input / Output in C++ George Kastrinis

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

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

Βασικές Αρχές Προγραμματισμού

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

Προγραµµατισµός. Αρχεία

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

Διάλεξη 11η: Δείκτες, μέρος 1

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

Προγραμματισμό για ΗΜΥ

Η γλώσσα προγραμματισμού C

Χpήσιµες Βιβλιοθήκες της γλώσσας C

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

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)

Transcript:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

>_ FILE SYSTEM

>_ ΔΙΚΑΙΩΜΑΤΑ

>_ ΔΙΚΑΙΩΜΑΤΑ?

>_ ΜΕΤΑΒΟΛΗ ΔΙΚΑΙΩΜΑΤΩΝ +- chmod (change mode)- δικαιώματα πρόσβασης αλλαγη αρχεί ου. +- Η εντολη chmod αλλάζει τα permissions ενός αρχείου ή ενός directory. Ένα αρχείο μπορει να έχει τρία δυνατα modes: read, write και execute. Το καθένα απο αυτα αντιπροσωπεύεται απο ένα ακέραιο αριθμο (συμβολισμός 8αδικού συστήματος) ή ένα γράμμα: +- συμβολισμός με αριθμούς read 4 write 2 execute 1 +- συμβολισμός με χαρακτήρες read r write w execute x

>_ CHMOD (1/2) +- Σύνταξη εντολής: chmod mode file +- όπου το mode μπορει να γραφει είτε με την αριθμητικη του μορφη, είτε με τη συμβολικη του μορφη. +- Αλλαγη της λειτουργίας του κάθε ΑΡΧΕΙΟΥ στην MODE. -C, - αλλαγές +- όπως φλύαρη αλλα αναφορα μόνο όταν γίνεται αλλαγη -F, - silent, - quiet +- καταστέλλουν τα περισσότερα μηνύματα λάθους -V, - verbose +- χρησιμοποιήσε τη λειτουργία ΑΡΧΕΙΟΑΝΑΦΟΡΑΣ, αντι των τιμών MODE - Reference = ΑΡΧΕΙΟΑΝΑΦΟΡΑΣ +- Αλλαγη των αρχείων και των καταλόγων αναδρομικα -R, - recursive

>_ CHMOD (2/2) +- Ο έλεγχος των permissions γίνεται σε επίπεδο χρήστη, ομάδας χρηστών και του συνόλου των χρηστών που υπάρχουν σε ένα σύστημα. Για καθένα απο αυτα, ορίζονται οι άδειες για κάθε ένα απο τα τρία δυνατα modes (r,w,x). Ο τρόπος με τον οποίο θέτουμε τα permissions είναι ο εξής: αποφασίζουμε για τον χρήστη (u) στον οποίο ανήκει το αρχείο, το group (g) στο οποίο ανήκει το αρχείο και για το σύνολο των χρηστών του συστήματος (o), τι άδειες πρόσβασης θα έχουν για το αρχείο αυτο. Αν θέλουμε ο χρήστης να έχει δυνατότητα εγγραφής (mode 2), ανάγνωσης (mode4) και εκτέλεσης (mode 1) του αρχείου, σημαίνει ότι συνολικα για τον χρήστη (u) το mode είναι 7 (2+4+1). Εργαζόμαστε με τη ίδια λογικη και για το group (g) και τους υπόλοιπους χρήστες (o). +- Έτσι, ένα αποδεκτο mode για ένα αρχείο θα ήταν το 744, που σημαίνει, read/write/execute για τον χρήστη, read για το group και read επίσης για τους υπόλοιπους χρήστες. Στην περίπτωση που θέλαμε να χρησιμοποιήσουμε την συμβολικη γραφη για τα permissions θα γράφαμε για mode το u=rwx,go=r. Στην περίπτωση που θέλουμε απλα να αλλάξουμε τα permissions προσθέτοντας ή αφαιρώντας άδειες χρήσης, μπορούμε να χρησιμοποιήσουμε τους τελεστές " " και"+" σε συνδυασμο με το είδος της άδειας που θέλουμε να δώσουμε, δηλαδη ένα mode u-r σημαίνει αφαίρεσε την δυνατότητα ανάγνωσης του αρχείου απο τον χρήστη στον οποίο ανήκει αυτο το αρχείο".

>_ ΠΑΡΑΔΕΙΓΜΑ +- Έστω ότι για ένα αρχείο με όνομα file1 θέλουμε να δώσουμε την δυνατότητα ανά γνωσης, εγγραφής και εκτέλεσης για τον χρήστη στον οποίο ανήκει το αρχείο, δυνατό τητα ανάγνωσης και εκτέλεσης για το group και το σύνολο των χρηστών. Αυτο γίνεται ως εξής: +- ή με το συνδιασμο των εξής εντολών: chmod 755 file1 chmod u+rwx file1 chmod go+rx file1

>_ ΑΡΧΕΙΑ

>_ ΑΡΧΕΙΑ ΣΤΗ C (1/7) +- FILE *fopen(const char *filename, const char *mode) +- Ανοίγει το αρχείο με όνομα filename για να το χρησιμοποιήσουμε με τον τρόπο που περιγράφεται στο mode. Επιστρέφει μια ροή (ή δείκτη σε αρχείο), με βάση το οποίο μπορούμε στη συνέχεια να αναφερόμαστε στο αρχείο, ή NULL, αν για κάποιο λόγο δεν ήταν δυνατόν να ανοίξει το α +- Το FILE είναι μία δομη (typedef éd απο το stdio.h) με κατάλληλα μέλη για να γίνεται ο χειρισμός του αρχείου. ρχείο.

>_ ΑΡΧΕΙΑ ΣΤΗ C (2/7) +- Το mode μπορει να είναι: "r" : Για διάβασμα απο υπάρχον αρχείο. "w" : Για γράψιμο σε αρχείο. Αν το αρχείο δεν υπάρχει, δημιουργείται. Αν υπάρχει, τα προηγούμενα περιεχόμενα του διαγράφονται και το γράψιμο αρχίζει απο την αρχη του αρχείου. "a" : Για γράψιμο σε αρχείο με προσάρτηση στο τέλος του των νέων δεδομένων, αν το αρχείο υπάρχει ήδη, χωρίς διαγραφη των προηγούμενων περιεχομένων του. "r+" : Για διάβασμα απο οπουδήποτε μέσα σε υπάρχον αρχείο και γράψιμο στην αρχη του αρχείου, χωρίς διαγραφη των προηγούμενων περιεχομένων του. "w+" : Για διάβασμα και γράψιμο, οπουδήποτε μέσα στο αρχείο, με διαγραφη των προηγούμενων περιεχομένων του, εφ όσον αυτο υπάρχει ήδη. "a+" : Για διάβασμα απο οπουδήποτε μέσα στο αρχείο και γράψιμο μόνο στο τέλος του, χωρίς διαγραφη των προηγούμενων περιεχομένων του.

>_ ΑΡΧΕΙΑ ΣΤΗ C (3/7) +- Σε ορισμένα συστήματα, γίνεται διάκριση μεταξυ αρχείων κειμένου και δυαδικώ ν αρχείων (στο Unix πάντως, όχι), οπότε εκει, αν θέλουμε να χειριστούμε ένα δυαδικο αρχείο, πρέ πει στο mode να προστεθει και ο χαρακτήρας b, δηλαδη να έχουμε, ανάλογα με την περίπτωση "rb", "wb", "ab", "r+b" ("rb+" ), "w+b" ("wb+" ), ή "a+b«("ab+" ). +- Όταν φτάνουμε στο τέλος της εισόδου ενός αρχείου, τότε επιστρέφει στο ό νομα της μία ειδικη τιμη, το EOF, που είναι #define d σε μία συγκεκριμένη ακέραια τιμη μέσα στο αρχείο επικεφαλίδας stdio.h.

>_ ΑΡΧΕΙΑ ΣΤΗ C (4/7) +- int fclose(file *fp) Κλείνει τη ροή fp. Επιστρέφει 0 ή EOF, σε περίπτωση επιτυχίας ή αποτυχίας, αντίστοιχα. +- char *fgets(char *buf, int max, FILE *fp) Διαβάζει το πολυ max-1 χαρακτήρες απο τη ροή fp, μέχρι την αλλαγη γραμμής (\n). Οι χαρακτήρες που διαβάστηκαν (μαζι και με το \n) φυλάσσονται στη συμβολοσειρα buf, η οποία τερματίζεται κανονικα με \0. Επιστρέφει το buf, ή NULL αν έχει διαβαστει όλη η είσοδος. +- int feof(file *fp) Επιστρέφει μη μηδενικη τιμη αν έχουν διαβαστει όλα τα δεδομένα απο τη ροή fp, δηλαδη έχουμε φτάσει στο τέλος του αρχείου που αντιστοιχει στη ροή, ή, αλλιώς, 0. +- int getc(file *fp) Επιστρέφει έναν χαρακτήρα απο το αρχείο μέσω της ροής fp, ή επιστρέφει EOF αν έχουμε φτάσει στο τέλος του αντίστοιχου αρχείου.

>_ ΑΡΧΕΙΑ ΣΤΗ C (5/7) +- int putc(int ch, FILE *fp) Γράφει τον χαρακτήρα ch στη ροή fp και αυξάνει την ένδειξη θέσης κατα ένα. Σε περίπτωση λάθους επιστρέφει EOF. +- int ungetc(int ch, FILE *fp) Γυρίζει πίσω στη ροή fp τον χαρακτήρα ch, έτσι ώστε να διαβαστει πάλι σε επόμενη ανάγνωση. Επιστρέφει τον χαρακτήρα αυτο, ή EOF σε περίπτωση λάθους. +- int fprintf(file *fp, const char *format, <op> 1, <op> 2,...) Ίδια με την printf, μόνο που γράφει στη ροή fp, αντι για το stdout. +- int fscanf(file *fp, const char *format, <op> 1, <op> 2,...) Ίδια με την scanf, μόνο που διαβάζει απο τη ροή fp, αντι απο το stdin. +- int sprintf(char *str, const char *format, <op> 1, <op> 2,...) Ίδια με την printf, μόνο που γράφει στη συμβολοσειρα str, αντι για τη ροή stdout.

>_ ΑΡΧΕΙΑ ΣΤΗ C (6/7) +- size t fread(void *ptr, size t size, size t count, FILE *fp) Διαβάζει απο τη ροή fp το πολυ count δεδομένα μεγέθους size το καθένα και τα τοποθετει απο τη διεύθυνση ptr και μετα. Επιστρέφει το πλήθος των δεδομένων που διαβάστηκαν. Ο έλεγχος τ έλους της εισόδου μπορει να γίνει με τη συνάρτηση feof. +- size t fwrite(const void *ptr, size t size, size t count, FILE *fp) Γράφει στη ροή fp το πολυ count δεδομένα μεγέθους size το καθένα, παίρνοντάς τα απο τη διεύθυνση ptr και μετα. Επιστρέφει το πλήθος των δεδομένων που γράφτηκαν. Αν γραφούν λιγό τερα απο count δεδομένα, αυτο θα οφείλεται σε κάποιο λάθος που συνέβη. +- int fseek(file *fp, long offset, int origin) Θέτει την τρέχουσα θέση στη ροή fp να είναι: +- offset ( 0) χαρακτήρες απο την αρχη, αν το origin έχει τεθει SEEK SET. offset χαρακτήρες απο την τρέχουσα θέση, αν το origin έχει τεθει SEEK CUR. +- offset χαρακτήρες απο το τέλος, αν το origin έχει τεθει SEEK END. Επιστρέφει 0 σε περι πτωση αποτυχίας

+- long ftell(file *fp) >_ ΑΡΧΕΙΑ ΣΤΗ C (7/7) Επιστρέφει την τρέχουσα θέση στη ροή fp, ή -1L σε περίπτωση λάθους. +- int fflush(file *fp) Γράφει στη ροή εξόδου fp ό,τι πιθανώς βρίσκεται στην ενδιάμεση περιοχη αποθήκευσης. Επιστρέφει 0 ή EOF, σε περίπτωση επιτυχίας ή αποτυχίας, αντίστοιχα. +- void perror(const char *s) Εκτυπώνει τη συμβολοσειρα s και μία περιγραφη του πιο πρόσφατου λάθους που έχει συμβει. Η συνάρτηση perror είναι πολυ κατατοπιστικη όταν χρησιμοποιούμε συναρτήσεις της πρότυπης βιβλιοθή κης της C, οι οποίες ενδέχεται να προκαλέσουν κάποιο λάθος, για παράδειγμα η malloc ή οι συναρτήσεις διαχείρισης αρχείων, όπως η fopen, και μας ενδιαφέρει να μάθουμε ποιο ακριβώς λάθος προκλήθηκε. Σχετικη με τη συνάρτηση perror είναι και μία εξωτερικη μεταβλητη errno, η οποία έχει σαν τιμη έναν ακέ ραιο που αντιστοιχει στο πιο πρόσφατο λάθος που έχει συμβει. +- Αν θέλουμε να χρησιμοποιήσουμε τη μεταβλητη errno μέσα σ ένα πρόγραμμα, πρέπει να έχουμε συμπεριλάβει και το αρχείο επικεφαλίδας στο οποίο ορίζεται: #include <errno.h>

>_ ΑΣΚΗΣΗ +- Γράψτε ένα πρόγραμμα σε C, το οποίο να διαβάζει το όνομα και τους βαθμούς n αριθμου μαθητών και να τα αποθηκεύει σε ένα αρχείο.

>_ ΛΥΣΗ

>_ ΑΣΚΗΣΗ +- Γράψτε ένα πρόγραμμα σε C, το οποίο θα αντιγράφει ένα αρχείο σε ένα άλλο.

>_ ΛΥΣΗ

I got tired of people complaining that it was too hard to use UNIX because the editor was too complicated. Bill Joy