140 likes | 357 Views
Διαφάνειες παρουσίασης #9. Διαχείριση αρχείων στην ANSI C Διαχείριση αρχείων στο Unix Ροές δεδομένων εισόδου / εξόδου στη C++. Διαχείριση αρχείων στην ANSI C (i). Βασικός τύπος <stdio.h> FILE * fp; δείκτης σε αρχείο Άνοιγμα & κλείσιμο αρχείων
E N D
Διαφάνειες παρουσίασης #9 Διαχείριση αρχείων στην ANSI C Διαχείριση αρχείων στο Unix Ροές δεδομένων εισόδου / εξόδου στη C++
Διαχείριση αρχείων στην 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);
Διαχείριση αρχείων στην 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, ...);
Διαχείριση αρχείων στην 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);
Διαχείριση αρχείων στο 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);
Διαχείριση αρχείων στο 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);
Διαχείριση αρχείων στο Unix (iii) • Στοιχεία αρχείων <unistd.h> int stat (const char * name, struct stat * s); int fstat (int fd, struct stat * s); • Στοιχεία που μπορούν να διαβαστούν • Χρήστης και ομάδα • Τύπος αρχείου και δικαιώματα πρόσβασης • Φυσική θέση στο σύστημα αρχείων • Μέγεθος αρχείου • Αριθμός σκληρών συνδέσμων • Χρόνος τελευταίας αλλαγής ή πρόσβασης
Διαχείριση αρχείων στο 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);
Διαχείριση αρχείων στο 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);
Διαχείριση αρχείων στο 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);
Ροές δεδομένων στη C++ (i) • Οι λειτουργίες εισόδου / εξόδου στη C++ υλοποιούνται από κλάσεις της βιβλιοθήκης • Αρχείο επικεφαλίδων <iostream.h> • Βασικοί τελεστές: >> και << • Βασικές κλάσεις • Γενικές ροές εισόδου / εξόδου istream, ostream, iostream • Ροές αρχείων εισόδου / εξόδου ifstream, ofstream, iofstream • Ροές εισόδου / εξόδου από συμβολοσειρές istrstream, ostrstream, iostrstream
Ροές δεδομένων στη 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; }
Ροές εισόδου / εξόδου (i) • Προκαθορισμένες ροές cout, cin, cerr, clog • Κλάση ostream ostream & operator << (ostream & s, T t); ostream & put (char c); ostream & write (const char * buf, int size); ostream & flush ();
Ροές εισόδου / εξόδου (ii) • Κλάση istream istream & 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);