Συνάρτηση Write() σε Γλώσσα C

Synartese Write Se Glossa C



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

Σε αυτό το άρθρο του Linux Hint, θα μάθετε πώς να χρησιμοποιείτε τη συνάρτηση write() για να γράψετε τα αρχεία.







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



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



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





Σύνταξη της συνάρτησης Write() στη γλώσσα C

ενθ γράφω ( ενθ fd , κενός * buf , μέγεθος_t n ) ;

Περιγραφή της συνάρτησης Write() στη γλώσσα C

Η συνάρτηση write() γράφει σε ένα ανοιχτό αρχείο. Αυτή η συνάρτηση εγγράφει τα περιεχόμενα του buffer που υποδεικνύεται με 'buf' στο αρχείο που καθορίζεται από τον περιγραφέα του στο όρισμα εισόδου 'fd'. Το μέγεθος του μπλοκ που θα εγγραφεί στο αρχείο πρέπει να καθοριστεί στο όρισμα εισαγωγής 'n'.

Για να μπορέσετε να γράψετε με τη συνάρτηση write(), το αρχείο πρέπει να ανοίξει με τη συνάρτηση open() και να καθοριστεί στα χαρακτηριστικά O_RDONLY ή O_RDWR. Διαφορετικά, αυτή η λειτουργία δεν έχει κανένα αποτέλεσμα.



Εάν η κλήση είναι επιτυχής, επιστρέφει τον αριθμό των χαρακτήρων που έχουν εισαχθεί. Εάν παρουσιαστεί σφάλμα κατά την εγγραφή, επιστρέφει ένα αποτέλεσμα ίσο με -1. Ο κωδικός αναγνώρισης που υποδεικνύει το σφάλμα μπορεί να ανακτηθεί από την καθολική μεταβλητή errno που ορίζεται στην κεφαλίδα 'errno.h'.

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

Η συνάρτηση write() ορίζεται στην κεφαλίδα 'unistd.h'. Οι σημαίες που ορίζουν τα χαρακτηριστικά και τη λειτουργία ανοίγματος του αρχείου ορίζονται στο 'fcntl.h'. Για να χρησιμοποιήσετε τις συναρτήσεις open() και write(), πρέπει να συμπεριλάβετε αυτές τις κεφαλίδες στον κώδικά σας ως εξής:

#include

#include

Πώς να γράψετε σε ένα αρχείο χρησιμοποιώντας τη συνάρτηση Write() στη γλώσσα C

Σε αυτό το παράδειγμα, γράφουμε ένα κενό αρχείο κειμένου με το όνομα 'example.txt' που δημιουργήσαμε νωρίτερα στον κατάλογο 'Documents'.

Το πρώτο βήμα είναι να εισαγάγετε τις απαραίτητες κεφαλίδες. Μέσα στη συνάρτηση main(), ανοίξτε το αρχείο με τη συνάρτηση open(). Για να γίνει αυτό, πρέπει να δηλώσουμε τον ακέραιο 'fd' που χρησιμεύει ως περιγραφέας αρχείου και τον πίνακα buffer 1024 χαρακτήρων 'buf' που περιέχει το κείμενο που θέλουμε να γράψουμε στο αρχείο. Σε αυτό το buffer, αποθηκεύουμε την πρώτη παράγραφο της σελίδας Man GCC για να την γράψουμε στο αρχείο 'example.txt'.

Αφού ανοίξουμε το αρχείο με τη συνάρτηση open() σε λειτουργία ανάγνωσης/εγγραφής, γράφουμε στο αρχείο καλώντας τη συνάρτηση write() και περνώντας τον περιγραφέα αρχείου “fd” ως πρώτο όρισμα εισαγωγής, τον δείκτη “buf” ως δεύτερο όρισμα και το μέγεθος της συμβολοσειράς που περιέχεται στον πίνακα ως το τρίτο όρισμα, το οποίο λαμβάνουμε με τη συνάρτηση strlen(). Εδώ είναι ο κώδικας για αυτό το παράδειγμα:

#include

#include

#include

#include

#include

#include

#include

κενός κύριος ( )

{

ενθ fd ;

απανθρακώνω ρυθμιστής [ 1024 ] = 'Όταν καλείτε το GCC, συνήθως κάνει προεπεξεργασία, μεταγλώττιση, συναρμολόγηση και σύνδεση. Οι συνολικές επιλογές σάς επιτρέπουν να σταματήσετε αυτήν τη διαδικασία σε ένα ενδιάμεσο στάδιο. Για παράδειγμα, η επιλογή -c λέει να μην εκτελεστεί ο σύνδεσμος. Στη συνέχεια, η έξοδος αποτελείται από αρχεία αντικειμένων που εξάγονται από το assembler.' ;

fd = Άνοιξε ( 'Documents/example.txt' , O_RDWR ) ;

γράφω ( fd , & ρυθμιστής , strlen ( ρυθμιστής ) ) ;

Κλείσε ( fd ) ;

}

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

Πώς να προσθέσετε ένα κείμενο στο τέλος ενός αρχείου με τη συνάρτηση Write() στη γλώσσα C

Όταν ένα αρχείο ανοίγει καθορίζοντας τις σημαίες O_WRONLY ή O_RDWR, ο κέρσορας μεταβαίνει στην πρώτη θέση και αρχίζει να γράφει από εκεί.

Για να προσθέσετε ένα κείμενο στο τέλος ενός αρχείου, πρέπει να καθοριστεί με μια λογική λειτουργία OR μεταξύ των σημαιών O_WRONLY ή O_RDWR και της σημαίας O_ APPEND στο όρισμα σημαιών εισόδου της συνάρτησης open() όταν ανοίγει το αρχείο. Με αυτόν τον τρόπο, ο κέρσορας τοποθετείται στο τέλος του αρχείου και από εκεί ξεκινά η εγγραφή. Επίσης, τα χαρακτηριστικά και η λειτουργία εγγραφής μπορούν να αλλάξουν μόλις ανοίξει το αρχείο με τη συνάρτηση fcntl().

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

#include

#include

#include

#include

#include

#include

#include

κενός κύριος ( )

{

ενθ fd ;

απανθρακώνω ρυθμιστής [ 1024 ] = 'Αυτό το κείμενο προστέθηκε. Αυτό το κείμενο προστέθηκε.' ;

fd = Άνοιξε ( 'Documents/example.txt' , O_RDWR | O_APPEND ) ;

γράφω ( fd , & ρυθμιστής , strlen ( ρυθμιστής ) ) ;

Κλείσε ( fd ) ;

}

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

Πώς να εντοπίσετε και να εντοπίσετε τα σφάλματα που μπορούν να προκύψουν κατά τη χρήση της συνάρτησης Write() στη γλώσσα C

Η χρήση της write() μπορεί να δημιουργήσει διάφορα σφάλματα. Όταν συμβεί αυτό, αυτή η συνάρτηση επιστρέφει ένα αποτέλεσμα ίσο με -1.

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

ενθ n ;

n = γράφω ( fd , & ρυθμιστής , strlen ( ρυθμιστής ) ) ;

αν ( n == - 1 ) {

printf ( 'Παρουσιάστηκε σφάλμα κατά την προσπάθεια εγγραφής του αρχείου.' ) ;

}

Εάν η συνάρτηση write() επιστρέψει με ένα σφάλμα, μεταβαίνει στη δήλωση 'if' και εκτυπώνει το μήνυμα ' Παρουσιάστηκε σφάλμα κατά την προσπάθεια εγγραφής του αρχείου '.

Όταν παρουσιαστεί ένα σφάλμα, ένας αριθμητικός κώδικας αποθηκεύεται αυτόματα στην καθολική μεταβλητή errno που ορίζεται στην κεφαλίδα 'errno.h'. Αυτός ο κωδικός μπορεί να χρησιμοποιηθεί για τον εντοπισμό του σφάλματος που παρουσιάστηκε.

Ακολουθεί ένα απόσπασμα με τα σφάλματα που μπορεί να δημιουργήσει η συνάρτηση write() και τα οποία ορίζονται στην κεφαλίδα 'errno.h', μαζί με μια σύντομη περιγραφή κάθε σφάλματος και τη σχετική ακέραια τιμή:

Ορισμός Αξία σε λάθος Λάθος
ΞΑΝΑ έντεκα Προσπάθησε ξανά.
EBADF 9 Λανθασμένος αριθμός αρχείου.
EDESTADDRREQ 89 Απαιτείται διεύθυνση προορισμού.
EDQUOT 122 Υπέρβαση ορίου.
EFAULT 14 Λανθασμένη διεύθυνση.
EFBIG 27 Το αρχείο είναι πολύ μεγάλο.
EINTR 4 Η κλήση συστήματος διακόπηκε.
ΜΟΝΑΔΙΚΗ ΕΠΙΛΟΓΗ 22 Μη έγκυρο όρισμα.
EIO 5 Σφάλμα εισόδου/εξόδου.
ENOSPC 28 Δεν υπάρχει χώρος στην συσκευή.
Ανώτερος 1 Δεν επιτρέπεται η λειτουργία.

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

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

#include

#include

#include

#include

#include

#include

#include

κενός κύριος ( )

{

ενθ fd ;

ενθ n ;

απανθρακώνω ρυθμιστής [ 1024 ] = 'Γειά σου Κόσμε' ;

fd = Άνοιξε ( 'Documents/example.txt' , O_RDWR ) ;

n = γράφω ( - 2 , & ρυθμιστής , strlen ( ρυθμιστής ) ) ;

αν ( n == - 1 ) {

διακόπτης ( λάθος ) {

υπόθεση EBADF : {

printf ( 'Εσφαλμένος αριθμός αρχείου. Σφάλμα: %i \n ' , λάθος ) ;

Διακοπή ; }

υπόθεση ΜΟΝΑΔΙΚΗ ΕΠΙΛΟΓΗ : {

printf ( 'Μη έγκυρο όρισμα. Σφάλμα: %i \n ' , λάθος ) ;

Διακοπή ; }

υπόθεση EIO : {

printf ( 'Σφάλμα εισόδου/εξόδου . Σφάλμα: %i \n ' , λάθος ) ;

Διακοπή ; }

}

}

}

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

συμπέρασμα

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

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

Σας δείξαμε επίσης πώς να επιλέξετε τη λειτουργία ανοιχτού αρχείου για να εισαγάγετε ένα κείμενο στην αρχή ή στο τέλος του αρχείου και ποιες λειτουργίες είναι διαθέσιμες για την αλλαγή αυτών των χαρακτηριστικών.