Δυαδική μορφή τι. Πώς να ενημερώσετε ένα δυαδικό αρχείο SU στο Android - επαναφορά της πρόσβασης root για την εφαρμογή SuperSu

Πολλοί άνθρωποι έχουν συχνά μια ερώτηση σχετικά με το πώς να ανοίξουν δυαδικό αρχείο. Αυτό το έγγραφο είναι οποιοδήποτε αρχείο βρίσκεται σε προσωπικό υπολογιστή. Όλα τα δεδομένα που βρίσκονται σε υπολογιστές και μέσα που σχετίζονται με αυτά καταγράφονται συνήθως σε bit. Από αυτή τη λέξη προέρχεται το όνομα. Εάν χρησιμοποιείτε ένα απλό αρχείο κειμένου ως σύγκριση, τότε δεν θα υπάρχουν προβλήματα κατά την ανάγνωσή του. Για να το κάνετε αυτό, αρκεί να έχετε έναν κανονικό επεξεργαστή στον υπολογιστή σας, ακόμη και ένα σημειωματάριο. Για να ανοίξετε ένα δυαδικό αρχείο, με ένα απλό σημειωματάριοδεν θα βγει. Και αν μιλάμε για ποιες πληροφορίες αρχεία κειμένουείναι κρυπτογραφημένο με τα ίδια bit, τότε συνήθως όταν μιλούν για ανάγνωση δυαδικών αρχείων, εννοούν εκτελέσιμα έγγραφα.

Οδηγίες για δράση

Πρώτον, στις HDD προσωπικός υπολογιστήςΠρέπει να εγκαταστήσετε ένα εργαλείο λογισμικού που ονομάζεται HexEditor, το οποίο είναι ένας απλός επεξεργαστής για δυαδικά αρχεία. Μετά την εγκατάσταση, το πρόγραμμα θα πρέπει να ανοίξει κάνοντας διπλό κλικ στο εικονίδιο. Αυτό το εργαλείο θα σας επιτρέψει να διαβάσετε ένα δυαδικό αρχείο πραγματική λειτουργία. Σε αυτήν την περίπτωση, μπορείτε να αλλάξετε τα δεδομένα στο αρχείο, να προσθέσετε τις δικές σας πληροφορίες κ.λπ. Για να εργαστείτε σε αυτόν τον συντάκτηκαι να τροποποιήσετε ένα δυαδικό αρχείο, πρέπει να έχετε τουλάχιστον κάποιες γνώσεις σε αυτόν τον τομέα δραστηριότητας.

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

Τρίτον, χρησιμοποιώντας το πρόγραμμα μπορείτε να προσπαθήσετε να αλλάξετε οποιοδήποτε μέρος του εγγράφου. Όπως αναφέρθηκε προηγουμένως, το εργαλείο λογισμικού εμφανίζει το αρχείο με τρόπο που βελτιώνει τον τρόπο με τον οποίο μπορείτε να βρείτε το τμήμα του εγγράφου που χρειάζεστε. Επιπλέον, το πρόγραμμα έχει αρκετά ευέλικτες ρυθμίσεις. Με τη βοήθειά του μπορείτε να αλλάξετε την οθόνη γραφικών δυάδικος κώδικας, το οποίο έχει ένα δυαδικό αρχείο. Εάν εισαχθούν λανθασμένα δεδομένα σε κάποιο μέρος του αρχείου, μπορεί στη συνέχεια είτε να σταματήσει να λειτουργεί εντελώς είτε να αρχίσει να λειτουργεί όχι εντελώς σωστά. Σε κάθε περίπτωση, η εισαγωγή τέτοιων δεδομένων θα προκαλέσει αλλαγές όπως στο λειτουργικό σύστημα, και απευθείας στον ίδιο τον προσωπικό υπολογιστή.

Τέταρτον, αφού αλλάξετε, διαγράψετε ή προσθέσετε ορισμένα δεδομένα σε ένα αρχείο, θα πρέπει να αποθηκεύσετε το αποτέλεσμα της εργασίας σας. Εάν δεν έχετε επαρκή εμπειρία στην επεξεργασία αρχείων, τότε θα πρέπει να είστε προετοιμασμένοι για όχι εντελώς ευχάριστες συνέπειες. Για παράδειγμα, ένα έγγραφο μπορεί να σταματήσει να λειτουργεί μετά από αλλαγές δεδομένων. Μέχρι να αρχίσετε να κατανοείτε καλά αυτό το ζήτημα, πολλά αντίγραφα αρχείων θα καταστραφούν. Εάν δεν είστε σίγουροι για τις δυνατότητές σας, τότε δεν πρέπει να αλλάξετε μόνοι σας τα δεδομένα, ειδικά σε περιπτώσεις όπου το υποδυαδικό αρχείο πρέπει να διορθωθεί.

Τα παραδείγματα που έχουμε εξετάσει μέχρι τώρα έχουν δείξει μορφοποιημένη είσοδο/έξοδο πληροφοριών σε αρχεία. Συνιστάται η χρήση μορφοποιημένων αρχείων εισόδου/εξόδου αριθμών μόνο όταν είναι μικροί σε μέγεθος και ποσότητα, καθώς και όταν είναι απαραίτητο να διασφαλιστεί η δυνατότητα προβολής αρχείων χωρίς λογισμικό. Διαφορετικά, φυσικά, είναι πολύ πιο αποτελεσματικό να χρησιμοποιείτε δυαδικό I/O, το οποίο αποθηκεύει αριθμούς με τον ίδιο τρόπο όπως στο OP του υπολογιστή, παρά ως συμβολοσειρές χαρακτήρων. Επιτρέψτε μου να σας υπενθυμίσω ότι μια ακέραια (int) ή πραγματική (float) τιμή καταλαμβάνει 4 byte στη μνήμη, μια διπλή τιμή παίρνει 8 byte και μια τιμή χαρακτήρων τύπου χαρ- 1 byte. Για παράδειγμα, ο αριθμός 12345 σε ένα αρχείο κειμένου (μορφοποιημένο) παίρνει 5 byte και σε ένα δυαδικό αρχείο 4 byte.

Δυαδικά αρχεία, δηλ. Τα αρχεία στα οποία είναι αποθηκευμένες οι πληροφορίες σε μια εσωτερική φόρμα αναπαράστασης χρησιμοποιούνται για μεταγενέστερη χρήση από το λογισμικό, δεν μπορούν να προβληθούν εκτός λογισμικού. Το πλεονέκτημα των δυαδικών αρχείων είναι ότι, πρώτον, κατά την ανάγνωση/εγγραφή, δεν χάνεται χρόνος για τη μετατροπή δεδομένων από τη συμβολική μορφή αναπαράστασης στην εσωτερική και αντίστροφα, και δεύτερον, δεν υπάρχει απώλεια ακρίβειας. πραγματικούς αριθμούς. Τόσο στην περίπτωση της μορφοποιημένης εισόδου/εξόδου όσο και στην περίπτωση της δυαδικής εισόδου/εξόδου, για να επεξεργαστείτε «σωστά» πληροφορίες από ένα αρχείο, πρέπει να γνωρίζετε ποιοι τύποι δεδομένων, πώς και με ποια σειρά γράφονται στο δυαδικό αρχείο αρχείο, ειδικά από την προβολή ενός δυαδικού αρχείου χρησιμοποιώντας επεξεργαστής κειμένουδεν θα δώσει τίποτα.

Ας εξετάσουμε ένα παράδειγμα που δείχνει την εγγραφή ακέραιων στοιχείων ενός δυναμικού πίνακα σε ένα δυαδικό αρχείο και την ανάγνωσή τους από αυτό το αρχείο.

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

χρησιμοποιώντας namespace std?

cout<< "Vvedite kol-vo elementov celochisl. massiva: "; cin >> N;

int *mas = νέο int [N];

για(i=0; i

cout<< " Vvedite " << i << "-i element: "; cin >> mas[i];

cout<< "\nIdet zapis dannyh v fail..." << endl;

ofstream fout("c:\\os\\bin.dat", ios::binary);//δημιουργήθηκε έξοδος δυαδική ροή

αν(!fout) (cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

fout.write(reinterpret_cast (mas), N*sizeof(int));//εγγραφή πίνακα σε αρχείο

fout.close();//κλείσιμο της ροής

cout<< "Dannye uspeshno zapisany!" << endl;

για(i=0; i

ifstream fin("c:\\os\\bin.dat", ios::binary); //δημιουργήστε ένα νήμα για να διαβάσετε το αρχείο

if(!fin) ( cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

cout<< "Fail sodergit:" << endl;

fin.read(reinterpret_cast (mas), N*sizeof(int));//ανάγνωση πίνακα από αρχείο

για(i=0; i

getch(); επιστροφή 0;

Σε αυτό το πρόγραμμα, θα πρέπει να δοθεί ιδιαίτερη προσοχή στη χρήση των συναρτήσεων write() (μέθοδος κλάσης offstream) και read() (μέθοδος κλάσης ifstream). Αυτές οι συναρτήσεις θεωρούν δεδομένα ως byte και έχουν σχεδιαστεί για να μεταφέρουν έναν ορισμένο αριθμό byte από μια προσωρινή μνήμη δεδομένων σε ένα αρχείο και πάλι πίσω. Οι παράμετροι αυτών των συναρτήσεων είναι η διεύθυνση buffer και το μήκος της σε byte.

Η συνάρτηση write() έχει σχεδιαστεί για να γράφει σε ένα αρχείο τον αριθμό των byte που καθορίζονται στη δεύτερη παράμετρο από αυτά που καθορίζονται στην πρώτη παράμετρο διευθύνσεις buffer δεδομένων και η συνάρτηση read() έχει σχεδιαστεί για να διαβάζει δεδομένα από ένα αρχείο. Θα πρέπει να σημειωθεί εδώ ότι αυτές οι λειτουργίες λειτουργούν μόνο με buffer δεδομένων τύπου char. Από αυτή την άποψη, σε αυτό το πρόγραμμα χρησιμοποιήσαμε τον τελεστή reinterpret_cast<> που μετατρέπει το buffer δεδομένων μας τύπου int (mas) σε buffer τύπου char.

Είναι σημαντικό να θυμάστε ότι η χύτευση χρησιμοποιώντας τον χειριστή reinterpret_cast απαραίτητο μόνο σε περιπτώσεις όπου η πρώτη παράμετρος των συναρτήσεωνγράφω() Καιανάγνωση() δεν είναι πίνακας χαρακτήρων (εξάλλου, χαρακτήρας τύπουαπανθρακώνω παίρνει μόνο 1 byte).Επιπλέον, εάν χρειάζεται να γράψετε ή να διαβάσετε όχι έναν πίνακα, αλλά μεμονωμένες μεταβλητές, τότε πρέπει να χρησιμοποιήσετε έναν μηχανισμό αναφοράς (έναν σύνδεσμο προς τη διεύθυνση του buffer δεδομένων), για παράδειγμα:

ofstream fout(όνομα αρχείου, ios::app | ios::binary);

fout.write(reinterpret_cast (& cb), sizeof(float));

Τώρα είναι απαραίτητο να συζητήσουμε τη δεύτερη παράμετρο των υπό εξέταση συναρτήσεων. Σε αυτό το πρόγραμμα, ως δεύτερη παράμετρος χρησιμοποιήσαμε την έκφραση N*sizeof(int), με την οποία υπολογίσαμε τον αριθμό των byte. Για παράδειγμα, εάν έχουμε 5 ακέραια στοιχεία πίνακα, τότε ο αριθμός των byte θα είναι 20. Η συνάρτηση sizeof() επιστρέφει τον αριθμό των byte που έχουν εκχωρηθεί για τον τύπο δεδομένων που καθορίζεται ως παράμετρος. Για παράδειγμα, sizeof( ενθ) θα επιστρέψει 4.

Έτσι, το πρόγραμμα που δίνεται σε αυτό το παράδειγμα σάς επιτρέπει να γράψετε δεδομένα σε δυαδική μορφή στο αρχείο bin.dat και να τα διαβάσετε από αυτό το δυαδικό αρχείο. Επιπλέον, μετά την ανάγνωση, αυτά τα δεδομένα μετατρέπονται στον τύπο int, αποκτούν δομή πίνακα και μπορούν να εκτελεστούν οποιεσδήποτε λειτουργίες με αυτόν.

Τώρα, φανταστείτε ότι πρέπει να γράψετε ένα πρόγραμμα που σας επιτρέπει να διαβάζετε δεδομένα από το αρχείο bin.dat και γνωρίζουμε μόνο ότι αυτό το αρχείο περιέχει τα στοιχεία ενός ακέραιου πίνακα σε δυαδική μορφή. Αριθμός στοιχείων που γράφτηκαν (Ν ) δεν ξέρουμε. Κατά τη δημιουργία ενός προγράμματος, δεν έχουμε το δικαίωμα να χρησιμοποιήσουμε σταθερό πίνακα, π.χ. εκχωρήστε μνήμη για αυτό στο στάδιο της δημιουργίας του προγράμματος. Αυτό θα οδηγήσει σε λανθασμένο αποτέλεσμα. Επειδή μια πολύ μικρή τιμή N θα έχει ως αποτέλεσμα να μην μετρώνται όλα τα στοιχεία του πίνακα και μια πολύ μεγάλη τιμή N θα έχει ως αποτέλεσμα την πλήρωση επιπλέον κελιών με τυχαίες τιμές.

Ας εξετάσουμε ένα παράδειγμα προγράμματος που σας επιτρέπει να διαβάσετε τα στοιχεία ενός ακέραιου πίνακα από ένα δυαδικό αρχείο με δυναμική κατανομή μνήμης και για να αποδείξετε τον ρεαλισμό των δεδομένων ανάγνωσης, να υπολογίσετε το άθροισμά τους.

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

χρησιμοποιώντας namespace std?

int N, i, sum=0, dfb; //dfb - μήκος αρχείου σε byte

ifstream fin("c:\\os\\bin.dat", ios::binary);

if(!fin) ( cout<< "Oshibka otkrytiya faila!"; getch(); return 1; }

fin.seekg(0, ios::end);//ρυθμίστε τη θέση ανάγνωσης στο τέλος του αρχείου (0 byte από το τέλος)

dfb = fin.tellg();//λάβετε την τιμή της θέσης τέλους αρχείου (σε byte)

N=dfb/4;//γνωρίζοντας ότι ένας ακέραιος παίρνει 4 byte, υπολογίστε τον αριθμό των αριθμών

int *arr = new int [N];//δημιουργία δυναμικού πίνακα

fin.seekg(0, ios::beg);//πριν από την ανάγνωση δεδομένων, μετακινήστε την τρέχουσα θέση στην αρχή του αρχείου

fin.read(reinterpret_cast (arr), dfb);

cout<< "Iz faila schitano " << N << " elementov:" << endl;

για(i=0; i

για(i=0; i

cout<< "\n Ih summa = " << sum;

getch(); επιστροφή 0;

Ας ρίξουμε μια πιο προσεκτική ματιά σε αυτό το πρόγραμμα, στο οποίο χρησιμοποιήσαμε ενεργά τις συναρτήσεις seekg() και tellg(), που είναι μέθοδοι της κλάσης ifstream. Εδώ πρέπει να σημειωθεί ότι Κάθε αρχείο όταν ανοίγει σχετίζεται με μια λεγόμενη τρέχουσα θέση ανάγνωσης ή εγγραφής. Όταν ένα αρχείο ανοίγει για ανάγνωση, αυτή η προεπιλεγμένη θέση ορίζεται στην αρχή του αρχείου. Αλλά αρκετά συχνά είναι απαραίτητο να ελέγχετε τη θέση χειροκίνητα για να μπορείτε να διαβάζετε και να γράφετε ξεκινώντας από μια αυθαίρετη θέση στο αρχείο. Οι συναρτήσεις seekg() και tellg() σας επιτρέπουν να ορίσετε και να ελέγξετε τον τρέχοντα δείκτη ανάγνωσης, ενώ οι συναρτήσεις seekp() και tellp() κάνουν το ίδιο για τον δείκτη εγγραφής.

Η μέθοδος seekg(1_parameter, 2_parameter) μετακινεί την τρέχουσα θέση ανάγνωσης από το αρχείο κατά τον αριθμό των byte που καθορίζονται στην 1_parameter σε σχέση με τη θέση που καθορίζεται στη 2nd_parameter. Το 2_parameter μπορεί να λάβει μία από τις τρεις τιμές:

ios::beg – από την αρχή του αρχείου.

ios::cur – από την τρέχουσα θέση;

ios::end – από το τέλος του αρχείου.

Εδώ beg, cur και end είναι σταθερές που ορίζονται στην κλάση ios και τα σύμβολα:: αντιπροσωπεύουν τη λειτουργία πρόσβασης σε αυτήν την κλάση. Για παράδειγμα, ο χειριστής fin.seekg(-10, ios::end);σας επιτρέπει να ορίσετε την τρέχουσα θέση ανάγνωσης από ένα αρχείο σε 10 byte πριν από το τέλος του αρχείου.

Ας επιστρέψουμε τώρα στην περιγραφή της λειτουργίας του προγράμματος. Με βάση το γεγονός ότι δεν γνωρίζουμε τον αριθμό των αριθμών που είναι γραμμένοι στο αρχείο, πρέπει πρώτα να μάθουμε τον αριθμό των αριθμών. Για να γίνει αυτό, χρησιμοποιώντας fin.seekg(0, ios::end);μεταβαίνουμε στο τέλος του αρχείου και, χρησιμοποιώντας τη συνάρτηση tellg(), επιστρέφουμε το μήκος του αρχείου σε byte στη μεταβλητή dfb. Η συνάρτηση tellg() επιστρέφει την τρέχουσα θέση του δείκτη σε byte. Δεδομένου ότι γνωρίζουμε το μήκος ενός ακέραιου αριθμού σε byte (4 byte), είναι εύκολο να υπολογίσουμε τον αριθμό των αριθμών που γράφτηκαν στο αρχείο, γνωρίζοντας το μήκος του αρχείου σε byte ( N=dfb/4;). Αφού μάθαμε τον αριθμό των αριθμών, δημιουργούμε έναν δυναμικό πίνακα και μετακινούμαστε στην αρχή του αρχείου για να ξεκινήσουμε την ανάγνωση δεδομένων χρησιμοποιώντας τη συνάρτηση read(). Αφού μεταφερθεί ο καθορισμένος αριθμός byte δεδομένων (dfb) στην προσωρινή μνήμη δεδομένων (arr), τα δεδομένα που διαβάζονται με αυτόν τον τρόπο αποκτούν μια δομή πίνακα και γίνονται πλήρως κατάλληλα για οποιεσδήποτε λειτουργίες κώδικα και μετασχηματισμούς.

εγγραφές), τότε είναι κατανοητό να θέλετε να μειώσετε με κάποιο τρόπο τον αχρησιμοποίητο αλλά κατειλημμένο χώρο μνήμης.

Ειδικά για τέτοιες περιπτώσεις υπάρχουν εγγραφές με παραλλαγή μέρος.

Περιγραφή εγγραφής με παραλλαγή τμήματος

Στην ενότητα var εγγραφή με παραλλαγή μέροςπεριγράψτε το έτσι:

var<имя_записи>:Ρεκόρ<поле1>: <тип1>; [<поле2>: <тип2>;] [...] υπόθεση<поле_переключатель>: <тип>του<варианты1>: (<поле3>: <тип3>; <поле4>: <тип4>; ...); <варианты2>: (<поле5>: <тип5>; <поле6>: <тип6>; ...) [...] τέλος;

Εξάρτημα χωρίς παραλλαγήοι καταχωρήσεις (πριν από τη λέξη-κλειδί πεζών-κεφαλαίων) ακολουθούν τους ίδιους κανόνες με μια κανονική καταχώρηση. Σε γενικές γραμμές, το μη παραλλαγή τμήμα μπορεί να απουσιάζει εντελώς.

Παραλλαγή μέροςαρχίζει με τη δεσμευμένη περίπτωση λέξης, μετά την οποία υποδεικνύεται το πεδίο εγγραφής, το οποίο στη συνέχεια θα χρησιμεύσει ως διακόπτης. Όπως συμβαίνει με μια κανονική δήλωση περίπτωσης, ο διακόπτης πρέπει να ανήκει σε ένα από τα enum τύπουςδεδομένα (βλ. διάλεξη 3). Η λίστα επιλογών μπορεί να είναι μια σταθερά, ένα εύρος ή η ένωση πολλών σταθερών ή περιοχών. Το σύνολο των πεδίων που πρέπει να συμπεριληφθούν στη δομή εγγραφής εάν εκτελεστεί η αντίστοιχη επιλογή περικλείεται σε παρένθεση.

Παράδειγμα. Για να περιγραφούν τα περιεχόμενα της βιβλιοθήκης χρειάζονται οι ακόλουθες πληροφορίες:

Οι στήλες "Τίτλος" και "Εκδότης" είναι κοινές και στις τρεις επιλογές και τα υπόλοιπα πεδία εξαρτώνται από τον τύπο της δημοσίευσης. Για την υλοποίηση αυτής της δομής θα χρησιμοποιήσουμε εγγραφή με παραλλαγή μέρος:

τύπος biblio = όνομα εγγραφής,εκδότης: συμβολοσειρά; Στοιχείο υπόθεσης: χαρακτήρας "β": (συγγραφέας: συμβολοσειρά; έτος: 0..2004); "n": (δεδομένα: ημερομηνία); "m": (έτος: 1700..2004; μήνας: 1..12; αριθμός: ακέραιος); τέλος;

Ανάλογα με την τιμή του πεδίου στοιχείου, η εγγραφή θα περιέχει είτε 4, 5 ή 6 πεδία.

Μηχανισμός χρήσης δίσκου με παραλλαγή εξάρτημα

Ο αριθμός των byte που έχει εκχωρηθεί από τον μεταγλωττιστή για εγγραφή με παραλλαγή μέρος, καθορίζεται από τη «μακρύτερο» έκδοσή του. Τα "μικρότερα" σύνολα πεδίων από άλλες επιλογές καταλαμβάνουν μόνο ένα συγκεκριμένο μέρος της εκχωρημένης μνήμης.

Στο παραπάνω παράδειγμα, η "μεγαλύτερη" επιλογή είναι "b": απαιτεί 23 byte (21 byte για συμβολοσειρά και 2 byte για ακέραιο). Οι επιλογές "n" και "m" απαιτούν 4 και 5 byte αντίστοιχα (βλ. πίνακα).

όνομα, εκδότης είδος Παραλλαγή μέρος
... "σι" συγγραφέας έτος
... "ν" δεδομένα
... "Μ" έτος μήνας αριθμός
... "σι" συγγραφέας έτος

Δυαδικά αρχεία

Τα δυαδικά αρχεία αποθηκεύουν πληροφορίες με τη μορφή με την οποία παρουσιάζονται στη μνήμη του υπολογιστή και επομένως είναι άβολα για τον άνθρωπο. Κοιτάζοντας ένα τέτοιο αρχείο, είναι αδύνατο να καταλάβουμε τι γράφεται σε αυτό. δεν μπορεί να δημιουργηθεί ή να διορθωθεί χειροκίνητα - σε κάποιο πρόγραμμα επεξεργασίας κειμένου - κ.λπ. Ωστόσο, όλες αυτές οι ταλαιπωρίες αντισταθμίζονται από την ταχύτητα εργασίας με δεδομένα.

Επιπλέον, τα αρχεία κειμένου ταξινομούνται ως δομές διαδοχική πρόσβαση, και δυαδικό - άμεσο. Αυτό σημαίνει ότι ανά πάσα στιγμή μπορείτε να έχετε πρόσβαση σε οποιοδήποτε στοιχείο, όχι μόνο στο τρέχον στοιχείο

Αρχεία. Επιπλέον, από την άποψη της τεχνικής υλοποίησης σε επίπεδο υλικού, τα αρχεία κειμένου είναι μια ειδική περίπτωση δυαδικών αρχείων, και έτσι, με την ευρεία έννοια της λέξης, κάθε αρχείο ταιριάζει στον ορισμό του «δυαδικού αρχείου».

Τα δυαδικά αρχεία χρησιμοποιούνται συχνά για αναφορά σε εκτελέσιμα αρχεία και συμπιεσμένα δεδομένα, αλλά είναι λάθος να περιοριστεί αυτή η έννοια με τέτοιο τρόπο.

Οραματισμός

Για την οπτική αναπαράσταση ενός δυαδικού αρχείου, χωρίζεται σε κομμάτια ίσου μεγέθους, που αναπαρίστανται ως αριθμοί, συνήθως γραμμένοι σε δεκαεξαδικό, μερικές φορές σε οκταδικό, δυαδικό ή δεκαδικό. Το υποδεικνυόμενο μέγεθος κομματιού μπορεί να είναι ίσο με μία οκτάδα, καθώς και με δύο ή τέσσερα (στην περίπτωση διαχωρισμού σε κομμάτια πολλών οκτάδων, χρησιμοποιείται η σειρά byte που υιοθετείται στην πλατφόρμα που χρησιμοποιείται). Η εξάρτηση του εύρους των αντιπροσωπευόμενων αριθμών από το μέγεθος του κομματιού φαίνεται στον πίνακα:

οκτάδες αριθμός bit δεκαεξαδικό οκτάεδρος δεκαδικός
ανυπόγραφο
δεκαδικός
εικονική
1 8 00

FF
000

377
0

255
-128

127
2 16 0000

FFFF
000000

177777
0

65535
-32768

32767
4 32 00000000

ΦΦΦΦΦΦΦΦ
00000000000

37777777777
0

4294967295
-2147483648

2147483647

Συχνά, εκτός από τις αριθμητικές τιμές byte, εμφανίζονται και χαρακτήρες της κωδικοσελίδας, για παράδειγμα, με τυπωμένους χαρακτήρες ASCII στα δεξιά) στην αρχή του αρχείου PNG με το λογότυπο της Wikipedia:

00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG.........IHDR| 00000010 00 00 00 87 00 00 00 a0 08 03 00 00 00 11 90 8f |............| 00000020 b6 00 00 00 04 67 41 4d 41 00 00 d6 d8 d4 4f 58 |.....gAMA.....OX| 00000030 32 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |2....tEXtSoftwar| 00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 00000050 64 79 71 c9 65 3c 00 00 03 00 50 4c 54 45 22 22 |dyq.e<....PLTE""| 00000060 22 56 56 56 47 47 47 33 33 33 30 30 30 42 42 42 |"VVVGGG333000BBB| 00000070 4b 4b 4b 40 40 40 15 15 15 4f 4f 4f 2c 2c 2c 3c |KKK@@@...OOO,<| 00000080 3c 3c 3e 3e 3e 3a 39 39 04 04 04 1d 1d 1d 35 35 |<<>>>:99......55| 00000090 35 51 50 50 37 37 37 11 11 11 25 25 25 0d 0d 0d |5QPP777...%%%...| 000000A0 27 27 27 1A 1A 1A 38 38 38 2A 2A 2A 08 08 08 20 | "" "888 *** ... | 000000B0 20 17 17 17 17 2e 2e 2e 13 13 13 13 BB BB BB 88 88 | ..............|

Εργαλεία

Για οπτικοποίηση

  • εντοπισμός σφαλμάτων (σε Microsoft Windows, μερικώς)
  • hexdump (σε GNU/Linux, κ.λπ.)

Για επεξεργασία

Βιβλιογραφία

  • Webster's New World Dictionary of Computer Terms, 4ο. Ed, Prentice Hall, NY, 1992. ISBN 0-671-84651-5
  • Leontyev B.K Μορφές αρχείων Microsoft Windows XP: Κατάλογος, M.: JSC “New Publishing House”, 2005. ISBN 5-9643-0059-6.

Ίδρυμα Wikimedia. 2010.

Δείτε τι είναι το "Δυαδικό αρχείο" σε άλλα λεξικά:

    Ουσιαστικό, μ., χρησιμοποιημένος. συγκρίνω συχνά Μορφολογία: (όχι) τι; αριθμός αρχείου? αρχείο, (δείτε) τι; αρχείο, τι; αρχείο, για τι; για το αρχείο? pl. Τι? αρχεία, (όχι) τι; αρχεία, τι; αρχεία, (βλέπω) τι; αρχεία, τι; αρχεία, για τι; σχετικά με τα αρχεία 1. Ένα αρχείο είναι ένας πίνακας... ... Επεξηγηματικό Λεξικό του Ντμίτριεφ

    Δυαδικό αρχείο με την ευρεία έννοια: μια ακολουθία αυθαίρετων byte. Το όνομα οφείλεται στο γεγονός ότι τα byte αποτελούνται από bit, δηλαδή δυαδικά ψηφία. Με τη στενή έννοια της λέξης, τα δυαδικά αρχεία αντιτίθενται στα αρχεία κειμένου... ... Wikipedia

    Δυαδικό αρχείο με την ευρεία έννοια: μια ακολουθία αυθαίρετων byte. Το όνομα οφείλεται στο γεγονός ότι τα byte αποτελούνται από bit, δηλαδή δυαδικά ψηφία. Με τη στενή έννοια της λέξης, τα δυαδικά αρχεία αντιτίθενται... ... Wikipedia

    αρχείο ρυθμίσεων- Ένα δυαδικό αρχείο ή αρχείο κειμένου που περιέχει πληροφορίες που καθορίζουν τη συμπεριφορά μιας εφαρμογής, υπολογιστή ή συσκευής δικτύου. Αρχείο διαμόρφωσης θεμάτων δικτύου υπολογιστών EN... Οδηγός Τεχνικού Μεταφραστή

    Αυτός ο όρος έχει άλλες έννοιες, βλέπε IPA (έννοιες). Μορφή .IPA για αρχεία αρχειοθέτησης εφαρμογών Apple για iPhone, iPod Touch και iPad. Τα αρχεία με αυτήν την επέκταση αποθηκεύονται στο App Store και γίνονται λήψη με χρήση του iTunes για... ... Wikipedia

    Αυτό το άρθρο ή ενότητα χρειάζεται αναθεώρηση. Δεν υπάρχουν ενότητες, OOP ή άλλες νέες τάσεις στο Pascal. Περιγραφές επεκτάσεων θα πρέπει να υπάρχουν μόνο σε άρθρα σχετικά με την αντίστοιχη ... Wikipedia

    Pascal Semantics: procedural Τύπος εκτέλεσης: μεταγλωττιστής Εμφανίστηκε το: 1970 Συγγραφέας: Niklaus Wirth Η Pascal είναι μια υψηλού επιπέδου γλώσσα προγραμματισμού γενικής χρήσης. Μία από τις πιο διάσημες γλώσσες προγραμματισμού, ευρέως... ... Wikipedia

    Όνομα Gopher: Θύρα/Αναγνωριστικό Gopher: 70/TCP Προδιαγραφή: RFC 1436 Κύριες εφαρμογές (πελάτες): Mozilla Firefox, Microsoft Windows: IE 5.x, IE 6 (περιορίζεται σε MS) Πρωτόκολλο δικτύου Gopher για κατανεμημένη αναζήτηση και μεταφορά εγγράφων, παλαιότερα ευρέως χρησιμοποιούμενο ... Wikipedia

    Όνομα: Gopher Port/ID: 70/TCP Προδιαγραφή: RFC 1436 Κύριες υλοποιήσεις (πελάτες): Mozilla Firefox, Microsoft Windows: Internet Explorer 5.x, Internet Explorer 6 (περιορίζεται σε MS) Πρωτόκολλο δικτύου Gopher για κατανεμημένη αναζήτηση και μετάδοση.. ... Βικιπαίδεια

    - / * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Σημείωση: Επειδή η επέκταση ονόματος αρχείου μπορεί να είναι οποιαδήποτε, η λίστα που παρέχεται δεν είναι πλήρης... Wikipedia

Στο παραπάνω παράδειγμα, η "μεγαλύτερη" επιλογή είναι "b": απαιτεί 23 byte (21 byte για τη συμβολοσειρά και 2 byte για τον ακέραιο). Οι επιλογές "n" και "m" απαιτούν 4 και 5 byte αντίστοιχα (βλ. πίνακα).

όνομα, στοιχείο εκδότη Παραλλαγή μέρος

Δυαδικά αρχεία

Τα δυαδικά αρχεία αποθηκεύουν πληροφορίες με τη μορφή με την οποία παρουσιάζονται στη μνήμη του υπολογιστή και επομένως είναι άβολα για τον άνθρωπο. Κοιτάζοντας ένα τέτοιο αρχείο, είναι αδύνατο να καταλάβουμε τι γράφεται σε αυτό. δεν μπορεί να δημιουργηθεί ή να διορθωθεί χειροκίνητα - σε κάποιο πρόγραμμα επεξεργασίας κειμένου - κ.λπ. Ωστόσο, όλες αυτές οι ταλαιπωρίες αντισταθμίζονται από την ταχύτητα εργασίας με δεδομένα.

Επιπλέον, τα αρχεία κειμένου ταξινομούνται ως δομές διαδοχικής πρόσβασης, ενώ τα δυαδικά αρχεία ταξινομούνται ως δομές άμεσης πρόσβασης. Αυτό σημαίνει ότι ανά πάσα στιγμή μπορείτε να έχετε πρόσβαση σε οποιονδήποτε, όχι μόνο στο τρέχον στοιχείο του δυαδικού αρχείου.

Δακτυλογραφημένα αρχεία

Οι μεταβλητές δομημένων τύπων δεδομένων (εκτός από τη συμβολοσειρά) δεν μπορούν να διαβαστούν από ένα αρχείο κειμένου. Για παράδειγμα, εάν πρέπει να εισαγάγετε δεδομένα από ένα αρχείο κειμένου για να συμπληρώσετε το αρχείο του παιχνιδιού με πληροφορίες σχετικά με παιχνίδια που είναι διαθέσιμα προς πώληση (όνομα προϊόντος, τιμή προϊόντος και εύρος ηλικίας για το οποίο προορίζεται το παιχνίδι):

ηλικία: σετ 0..18; (καθορίζεται στο αρχείο με όρια)

τότε θα πρέπει να γράψετε τον παρακάτω κώδικα:

c:char; i,j,min,max: ακέραιος;

α: σειρά παιχνιδιών.

start assign(f,input); επαναφορά (f);

για i:=1 έως 100 κάντε αν όχι eof(f)

τότε με ένα[i] do

έναρξη ανάγνωσης (f,όνομα,τιμή,ελάχ., μέγιστο); ηλικία:=;

για j:= ελάχιστα έως μέγιστο do age:=age+[j];

Όπως μπορείτε να δείτε, μια τέτοια ανάγνωση στοιχείο προς στοιχείο είναι πολύ άβολη και απαιτεί ένταση εργασίας.

Προσφέρεται διέξοδος από αυτή την κατάσταση δακτυλογραφημένα αρχεία- τα στοιχεία τους μπορούν να ανήκουν σε οποιονδήποτε βασικό ή δομημένο τύπο δεδομένων. Ο μόνος περιορισμός είναι ότι όλα τα στοιχεία πρέπει να είναι του ίδιου τύπου. Αυτή η φαινομενική ταλαιπωρία είναι

μια απαραίτητη προϋπόθεση για την οργάνωση της άμεσης πρόσβασης στα στοιχεία ενός δυαδικού αρχείου: όπως στην περίπτωση των πινάκων, εάν το μήκος κάθε στοιχείου της δομής είναι γνωστό ακριβώς, τότε η διεύθυνση οποιουδήποτε στοιχείου μπορεί να υπολογιστεί χρησιμοποιώντας έναν πολύ απλό τύπο:

<начало_структуры> + <номер_компонента>*<длина_компонента>

Περιγραφή πληκτρολογημένων αρχείων

Στην ενότητα var υπάρχουν μεταβλητές αρχείων που έχουν σχεδιαστεί για εργασία δακτυλογραφημένα αρχεία, περιγράφονται ως εξής:

var<файловая_перем>: αρχείο του<тип_элементов_файла>;

Καμία μεταβλητή αρχείου δεν μπορεί να καθοριστεί ως σταθερά.

Σκοπός ενός πληκτρολογημένου αρχείου

Από εδώ και πέρα ​​μέχρι το τέλος της ενότητας, με τη λέξη "αρχείο" θα εννοούμε " δυαδικό πληκτρολογημένο αρχείο" (φυσικά, εκτός αν αναφέρεται διαφορετικά).

Ομάδα εκχωρώ(f"<имя_файла>"); χρησιμεύει για τη δημιουργία μιας σύνδεσης μεταξύ της μεταβλητής αρχείουf και του ονόματος του αρχείου για το οποίο αυτή η μεταβλητή θα είναι υπεύθυνη να λειτουργεί.

Γραμμή"<имя_файла>" μπορεί να περιέχει την πλήρη διαδρομή προς το αρχείο. Εάν η διαδρομή δεν έχει καθοριστεί, το αρχείο θεωρείται ότι βρίσκεται στον ίδιο κατάλογο με την εκτελέσιμη λειτουργική μονάδα του προγράμματος.

Άνοιγμα και κλείσιμο ενός πληκτρολογημένου αρχείου

Ανάλογα με τις ενέργειες που πρόκειται να εκτελέσει το πρόγραμμά σας με το άνοιγμα του αρχείου, μπορεί να ανοίξει με δύο τρόπους:

επαναφορά (f); - άνοιγμα ενός αρχείου για ανάγνωση πληροφοριών από αυτό και ταυτόχρονα εγγραφή σε αυτό (αν δεν υπάρχει τέτοιο αρχείο, μια προσπάθεια να το ανοίξετε θα προκαλέσει σφάλμα). Η ίδια εντολή χρησιμοποιείται για την επιστροφή ενός δείκτη στην αρχή του αρχείου.

ξαναγράψω(f); - άνοιγμα ενός αρχείου για να γράψετε πληροφορίες σε αυτό. αν δεν υπάρχει τέτοιο αρχείο, θα δημιουργηθεί. Εάν υπάρχει ήδη ένα αρχείο με το ίδιο όνομα, όλες οι πληροφορίες που περιέχονταν προηγουμένως σε αυτό θα εξαφανιστούν.

κλείνουν δακτυλογραφημένα αρχείαδιαδικασία κλείσιμο(f) , κοινή σε όλους τους τύπους αρχείων.

Ανάγνωση από πληκτρολογημένο αρχείο

Η ανάγνωση από ένα αρχείο που είναι ανοιχτό για ανάγνωση γίνεται χρησιμοποιώντας την εντολή read(). Σε παρένθεση, υποδεικνύεται πρώτα το όνομα της μεταβλητής αρχείου και μετά η λίστα εισόδου1):

Μπορείτε να εισάγετε μόνο μεταβλητές του τύπου που αντιστοιχούν στη δήλωση από ένα αρχείο, αλλά αυτός ο τύπος δεδομένων μπορεί επίσης να δομηθεί. Ας πούμε, αν επιστρέψουμε στο παράδειγμα που δόθηκε στην αρχή της παραγράφου. Δακτυλογραφημένα αρχεία», τότε θα γίνει φανερό ότι η χρήση δακτυλογραφημένο αρχείοαντί για κείμενο, θα μειώσει σημαντικά το κείμενο του προγράμματος:

τύπος παιχνίδι = όνομα δίσκου: κορδόνι; τιμή: πραγματική;

ηλικία: σετ 0..18; (καθορίζεται από τα όρια)

var f: αρχείο του παιχνιδιού;

α: σειρά παιχνιδιών. αρχίζουν

assign(f,input);

για i:=1 έως 100 κάνω

αν όχι eof(f) τότε διαβάστε(f,a[i]); close(f);

Αναζήτηση σε ένα πληκτρολογημένο αρχείο

Η συνάρτηση eof(f:file):boolean, ήδη γνωστή σε εμάς, αναφέρει όταν έχει φτάσει το τέλος του αρχείου. Όλες οι άλλες συναρτήσεις "τελικής αναζήτησης" (eoln(), seekeof() και seekeoln()) που είναι εγγενείς στα αρχεία κειμένου δεν μπορούν να εφαρμοστούν σε πληκτρολογημένα αρχεία.

Υπάρχουν όμως ειδικές υπορουτίνες που σας επιτρέπουν να εργαστείτε δακτυλογραφημένα αρχείαόπως και με τις δομές άμεσης πρόσβασης:

1. Η συνάρτηση filepos(f:file):longint θα αναφέρει την τρέχουσα θέση του δείκτη στο filef. Εάν δείχνει στο τέλος ενός αρχείου που περιέχει N στοιχεία, τότε αυτή η συνάρτηση θα επιστρέψει το αποτέλεσμα N . Αυτό είναι εύκολο να εξηγηθεί: τα στοιχεία του αρχείου αριθμούνται ξεκινώντας από το μηδέν, επομένως το τελευταίο στοιχείο αριθμείται N-1. Και έτσι ο αριθμόςN ανήκει σε ένα «ανύπαρκτο» στοιχείο - ένα σημάδι του τέλους του αρχείου.

2. Η συνάρτηση filesize(f:file):longint θα υπολογίσει το μήκος του αρχείου f .

3. Η διαδικασία seek(f:file,n:longint) θα μετακινήσει τον δείκτη στο αρχείο f στην αρχή του αριθμού εγγραφής N . Εάν αποδειχθεί ότι το n είναι μεγαλύτερο από το πραγματικό μήκος του αρχείου, τότε ο δείκτης θα μετακινηθεί πέρα ​​από το πραγματικό τέλος του αρχείου.

4. Η διαδικασία περικοπής (f:file) θα περικόψει την "ουρά" του αρχείου: όλα τα στοιχεία από το τρέχον έως το τέλος του αρχείου θα αφαιρεθούν από αυτό. Στην πραγματικότητα, μόνο το σύμβολο "τέλος αρχείου" θα ξαναγραφεί στο σημείο όπου έδειξε ο δείκτης και οι φυσικές τιμές "αποκοπής" θα παραμείνουν στις αρχικές τους θέσεις - απλώς θα μείνουν "ορφανές".

Εγγραφή σε ένα Δακτυλογραφημένο αρχείο

Μπορείτε να αποθηκεύσετε μεταβλητές σε ένα αρχείο που είναι ανοιχτό για εγγραφή χρησιμοποιώντας την εντολή write(). Όπως και με την ανάγνωση, η μεταβλητή αρχείου παρατίθεται πρώτη, ακολουθούμενη από τη λίστα εξόδου:

write(f,a,b,c); - εγγραφή στο αρχείο f (που είχε ανοίξει προηγουμένως για εγγραφή με τις εντολές επανεγγραφή (f) ή επαναφορά (f) ) μεταβλητές a , b , c .

Έξοδος σε δακτυλογραφημένο αρχείοΕπιτρέπονται μόνο μεταβλητές που αντιστοιχούν στην περιγραφή του τύπου δεδομένων. Δεν μπορούν να εκτυπωθούν σταθερές χωρίς όνομα και χωρίς πληκτρολόγηση

δακτυλογραφημένο αρχείο.

Δακτυλογραφημένα αρχείαθεωρούνται δομές άμεσης και διαδοχικής πρόσβασης. Αυτό σημαίνει ότι η εγγραφή είναι δυνατή όχι μόνο στο τέλος του αρχείου, αλλά και σε οποιοδήποτε άλλο στοιχείο. Η τιμή που γράφτηκε θα αντικαταστήσει την προηγούμενη τιμή σε αυτό το στοιχείο (η παλιά τιμή θα "αντικατασταθεί").

Για παράδειγμα, εάν πρέπει να αντικαταστήσετε το πέμπτο στοιχείο ενός αρχείου με την τιμή που είναι αποθηκευμένη στη μεταβλητή a, τότε θα γράψετε το ακόλουθο απόσπασμα προγράμματος:

seek(f,5); (ο δείκτης θα οριστεί στην αρχή του 5ου στοιχείου)

write(f,a); (ο δείκτης θα οριστεί στην αρχή του 6ου στοιχείου)