Σειριακή επεξεργασία κωδικοποιημένων αρχείων στη C
Για λόγους απόδοσης συχνά τα αρχεία δεν περιέχουν παράσταση των
τιμών των δεδομένων με τη μορφή που τα εισάγουν και τα διαβάζουν
οι άνθρωποι (αρχεία ASCII (ASCII files)),
αλλά με τη μορφή που φυλάσσονται στη μνήμη του υπολογιστή
(δυαδικά αρχεία (binary files)).
Ο τρόπος αυτός φύλλαξης έχει τις παρακάτω επιπτώσεις:
- το πρόγραμμα είναι ταχύτερο μια και δεν απαιτείται μετατροπή
μεταξύ της εσωτερικής και της εξωτερικής μορφής παράστασης.
- η αποσφαλμάτωση του προγράμματος και των αρχείων του
είναι πιο δύσκολη μια και τα δυαδικά αρχεία δεν μπορούν να διαβαστούν
εύκολα από τυποποιημένα εργαλεία του συστήματος όπως ο διορθωτής.
- τα δυαδικά αρχεία δεν μπορούν να μεταφερθούν ανάμεσα σε υπολογιστές
διαφορετικής αρχιτεκτονικής (π.χ. από Intel Pentium σε DEC Alpha) μια
και η εσωτερική παράσταση των δεδομένων μεταξύ των αρχιτεκτονικών συνήθως
διαφέρει.
- Τα δυαδικά αρχεία καταλαμβάνουν λιγότερο χώρο από τα αρχεία ASCII.
Μεταφορά στοιχείων μεταξύ της κεντρικής μνήμης και αρχείων γίνεται
με τις συναρτήσεις:
- fread(void *ptr, size_t size, size_t nitems, FILE *stream)
-
Μεταφέρει nitems στοιχεία μεγέθους size από το αρχείο f στη θέση μνήμης ptr.
- fwrite(void *ptr, size_t size, size_t nitems, FILE *stream)
-
Μεταφέρει nitems στοιχεία μεγέθους size από τη θέση μνήμης ptr στο αρχείο f.
Το παρακάτω παράδειγμα γράφει τον πίνακα tbl στο αρχείο f:
int tbl[100];
fwrite(tbl, sizeof(int), 100, f);