Download - Διαφάνειες παρουσίασης #9

Transcript
Page 1: Διαφάνειες παρουσίασης #9

ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

[email protected]Διδάσκων: Νίκος Παπασπύρου

http://www.softlab.ntua.gr/~nickie/TUC/log201/

1Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαφάνειες παρουσίασης #9

Διαχείριση αρχείων στην ANSI CΔιαχείριση αρχείων στο UnixΡοές δεδομένων εισόδου / εξόδου στη C++

Page 2: Διαφάνειες παρουσίασης #9

2Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στην ANSI C (i)

Βασικός τύπος <stdio.h>

FILE * fp; δείκτης σε αρχείο

Άνοιγμα & κλείσιμο αρχείωνFILE * fopen (const char * name, const char * mode);

FILE * freopen (const char * name, const char * mode, FILE * oldf);

FILE * fdopen (int fd, const char * mode);

int fclose (FILE * fp);

int fflush (FILE * fp);

Page 3: Διαφάνειες παρουσίασης #9

3Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στην ANSI C (ii)

Ανάγνωση & εγγραφήint fputc (int c, FILE * fp);

int fgetc (FILE * fp);

int fputs (const char * s, FILE * fp);

char * fgets (char * s, int n, FILE * fp);

int fprintf (FILE * fp, const char * format, ...);

int fscanf (FILE * fp, const char * format, ...);

Page 4: Διαφάνειες παρουσίασης #9

4Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στην ANSI C (iii)

Ανάγνωση & εγγραφή δυαδικών δεδομένωνsize_t fwrite (const void * p,size_t size, size_t num, FILE * fp);

size_t fread (void * p,size_t size, size_t num, FILE * fp);

Τέλος αρχείουint feof (FILE * fp);

Τυχαία προσπέλαση αρχείωνint fseek (FILE * fp, long offset,int origin);

long ftell (FILE * fp);

Page 5: Διαφάνειες παρουσίασης #9

5Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στο Unix (i)

Βασικός τύπος<io.h>

int fd; περιγραφή αρχείου (file

descriptor)

Άνοιγμα αρχείων <fcntl.h>

int open (const char * name, int mode, ...);

int creat (const char * name, int mode);

Κλείσιμο αρχείων <unistd.h>

int close (int fd);

Page 6: Διαφάνειες παρουσίασης #9

6Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στο Unix (ii)

Ανάγνωση & εγγραφή <unistd.h>ssize_t write (int fd, const void * p, size_t size);

ssize_t read (int fd, void * p, size_t size);

Τυχαία προσπέλαση αρχείων <unistd.h>off_t lseek (int fd, off_t pos,int whence);

Σκληροί σύνδεσμοι <unistd.h>int link (const char * cur_name, const char * new_name);

int unlink (const char * cur_name);

Page 7: Διαφάνειες παρουσίασης #9

7Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στο Unix (iii)

Στοιχεία αρχείων <unistd.h>

int stat (const char * name, struct stat * s);

int fstat (int fd, struct stat * s);

Στοιχεία που μπορούν να διαβαστούν Χρήστης και ομάδα Τύπος αρχείου και δικαιώματα πρόσβασης Φυσική θέση στο σύστημα αρχείων Μέγεθος αρχείου Αριθμός σκληρών συνδέσμων Χρόνος τελευταίας αλλαγής ή πρόσβασης

Page 8: Διαφάνειες παρουσίασης #9

8Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στο Unix (iv)

Δικαιώματα πρόσβασης <unistd.h>

int access (const char * name, int flag);

int chmod (const char * name, mode_t flag);

int fchmod (int fd, mode_t flag);

Χρήστης και ομάδα <unistd.h>

int chown (const char * name, uid_t uid, gid_t gid);

int fchown (int fd, uid_t uid, gid_t gid);

Page 9: Διαφάνειες παρουσίασης #9

9Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στο Unix (v)

Συμβολικοί σύνδεσμοι<unistd.h>

int symlink (const char * cur_name, const char * new_name);

int readlink (const char * cur_name, char * buf, int size);

Δημιουργία καταλόγων<unistd.h>

int mkdir (const char * name, mode_t mode);

Page 10: Διαφάνειες παρουσίασης #9

10Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαχείριση αρχείων στο Unix (vi)

Διαχείριση καταλόγων<dirent.h>

DIR * opendir (const char * name);

int closedir (DIR * dir);

struct dirent * readdir (DIR * dir);

Παράδειγμα: υλοποίηση εντολής ls

DIR * dir = opendir ("/home/nickie");struct dirent * dp;

while ((dp = readdir (dir)) != NULL) printf("%s\n", dp->name);closedir(dir);

Page 11: Διαφάνειες παρουσίασης #9

11Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Ροές δεδομένων στη C++ (i)

Οι λειτουργίες εισόδου / εξόδου στη C++ υλοποιούνται από κλάσεις της βιβλιοθήκης

Αρχείο επικεφαλίδων <iostream.h> Βασικοί τελεστές: >> και << Βασικές κλάσεις

Γενικές ροές εισόδου / εξόδουistream, ostream, iostream

Ροές αρχείων εισόδου / εξόδουifstream, ofstream, iofstream

Ροές εισόδου / εξόδου από συμβολοσειρέςistrstream, ostrstream, iostrstream

Page 12: Διαφάνειες παρουσίασης #9

12Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Ροές δεδομένων στη C++ (ii)

Παράδειγμα#include <iostream.h>

int main (){ char login[10]; int code;

cout << "login: "; cin >> login; cout << "code: "; cin >> code; cout << "You gave " << login << "and " << code << endl; return 0;}

Page 13: Διαφάνειες παρουσίασης #9

13Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Ροές εισόδου / εξόδου (i)

Προκαθορισμένες ροέςcout, cin, cerr, clog

Κλάση ostreamostream & operator << (ostream & s, T t);

ostream & put (char c);

ostream & write (const char * buf, int size);

ostream & flush ();

Page 14: Διαφάνειες παρουσίασης #9

14Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Ροές εισόδου / εξόδου (ii)

Κλάση istreamistream & operator >> (ostream & s, T & t);

istream & get (char & c);

int get ();

istream & read (char * buf, int size);

istream & getline (char * buf, int size, char delim = '\n');

int peek ();

istream & putback (char c);