Funcția Write() în limbajul C

Functia Write In Limbajul C



Gestionarea fișierelor în programare este o sarcină pe care programatorul trebuie să o cunoască fluent. Cunoașterea diferitelor funcții de deschidere, citire și scriere este esențială, deoarece avem întotdeauna nevoie de ele pentru a stoca sau elimina informațiile care sunt stocate în fișiere.

În acest articol Linux Hint, veți învăța cum să utilizați funcția write() pentru a scrie fișierele.







Vom explica totul despre această ella, sintaxa ei, metoda de apelare, argumentele de intrare și de ieșire, tipul de date pe care le acceptă în fiecare caz și cum să le declarăm corect.



Apoi, aplicăm ceea ce am învățat punând utilizarea acestei funcții în exemple practice pe care le-am pregătit pentru dvs. cu fragmente de cod și imagini, care arată utilizarea write() în limbajul C.



Pentru a avea o cunoaștere cuprinzătoare a utilizării funcției write(), am adăugat o secțiune specială care descrie erorile individuale care pot apărea la utilizarea acestei funcții, precum și detectarea și identificarea acestora, astfel încât să aveți tehnici necesare pentru o rezolvare rapidă în cazul apariţiei lor.





Sintaxa funcției Write() în limbajul C

int scrie ( int fd , gol * buf , dimensiune_t n ) ;

Descrierea funcției Write() în limbajul C

Funcția write() scrie într-un fișier deschis. Această funcție scrie conținutul buffer-ului care este indicat de „buf” în fișierul care este specificat de descriptorul său în argumentul de intrare „fd”. Mărimea blocului de scris în fișier trebuie specificată în argumentul de intrare „n”.

Pentru a putea scrie cu funcția write(), fișierul trebuie deschis cu funcția open() și specificat în atributele O_RDONLY sau O_RDWR. În caz contrar, această funcție nu are efect.



Dacă apelul are succes, acesta returnează numărul de caractere introduse. Dacă apare o eroare în timpul scrierii, returnează un rezultat care este egal cu -1. Codul de identificare care indică eroarea poate fi preluat din variabila globală errno care este definită în antetul „errno.h”.

Mai târziu, veți găsi o secțiune în care vă explicăm cum să detectați și să identificați cele mai frecvente erori ale acestei funcții.

Funcția write() este definită în antetul „unistd.h”. Steagurile care definesc atributele și modul de deschidere a fișierului sunt definite în „fcntl.h”. Pentru a utiliza funcțiile open() și write(), trebuie să includeți aceste anteturi în cod, după cum urmează:

#include

#include

Cum se scrie într-un fișier folosind funcția Write() în limbajul C

În acest exemplu, scriem un fișier text gol numit „example.txt” pe care l-am creat mai devreme în directorul „Documente”.

Primul pas este să inserați anteturile necesare. În interiorul funcției main(), deschideți fișierul cu funcția open(). Pentru a face acest lucru, trebuie să declarăm întregul „fd” care servește ca descriptor de fișier și matricea tampon „buf” de 1024 de caractere care conține textul pe care dorim să-l scriem în fișier. În acest buffer, stocăm primul paragraf al paginii de manual GCC pentru a-l scrie în fișierul „example.txt”.

După deschiderea fișierului cu funcția open() în modul citire/scriere, scriem în fișier apelând funcția write() și trecând descriptorul fișierului „fd” ca prim argument de intrare, pointerul „buf” ca al doilea. argument și dimensiunea șirului care este conținut în matrice ca al treilea argument, pe care îl obținem cu funcția strlen(). Iată codul pentru acest exemplu:

#include

#include

#include

#include

#include

#include

#include <șir.h>

gol principal ( )

{

int fd ;

char tampon [ 1024 ] = „Când invocați GCC, în mod normal face preprocesare, compilare, asamblare și legare. Opțiunile generale vă permit să opriți acest proces într-o etapă intermediară. De exemplu, opțiunea -c spune să nu rulați linkerul. Apoi, rezultatul constă din fișiere obiect ieșite de asamblator.' ;

fd = deschis ( „Documente/example.txt” , O_RDWR ) ;

scrie ( fd , & tampon , strlen ( tampon ) ) ;

închide ( fd ) ;

}

În figura următoare, vedem compilarea și execuția acestui cod împreună cu fișierul deschis care este scris de funcția write():

Cum să adăugați un text la sfârșitul unui fișier cu funcția Write() în limbajul C

Când un fișier este deschis prin specificarea steagurilor O_WRONLY sau O_RDWR, cursorul sare în prima poziție și începe să scrie de acolo.

Pentru a adăuga un text la sfârșitul unui fișier, acesta trebuie să fie specificat printr-o operație logică OR între steaguri O_WRONLY sau O_RDWR și steagul O_ APPEND din argumentul steagurilor de intrare al funcției open() când fișierul este deschis. În acest fel, cursorul este plasat la sfârșitul fișierului și de acolo începe scrierea. De asemenea, atributele și modul de scriere pot fi schimbate odată ce fișierul este deschis cu funcția fcntl().

În ilustrația următoare, puteți vedea un cod care adaugă un text la sfârșitul fișierului pe care l-am scris în exemplul anterior:

#include

#include

#include

#include

#include

#include

#include <șir.h>

gol principal ( )

{

int fd ;

char tampon [ 1024 ] = 'Acest text este adăugat. Acest text este adăugat.' ;

fd = deschis ( „Documente/example.txt” , O_RDWR | O_APPEND ) ;

scrie ( fd , & tampon , strlen ( tampon ) ) ;

închide ( fd ) ;

}

Următoarea imagine arată textul adăugat. După cum puteți vedea, cu această metodă de deschidere, funcția write() începe să scrie la poziția ultimului caracter care este scris în fișier:

Cum să detectați și să identificați erorile care pot apărea atunci când utilizați funcția Write() în limbajul C

Utilizarea write() poate genera diverse erori. Când se întâmplă acest lucru, această funcție returnează un rezultat care este egal cu -1.

Cel mai simplu mod de a determina dacă a apărut o eroare este să folosiți o condiție „dacă” în care condiția este valoarea returnată de -1. Acum, să vedem cum puteți utiliza această metodă pentru a determina dacă a apărut o eroare:

int n ;

n = scrie ( fd , & tampon , strlen ( tampon ) ) ;

dacă ( n == - 1 ) {

printf ( „A apărut o eroare la încercarea de a scrie fișierul.” ) ;

}

Dacă funcția write() revine cu o eroare, trece la instrucțiunea „dacă” și afișează mesajul „ A apărut o eroare la încercarea de a scrie fișierul „.

Când apare o eroare, un cod numeric este stocat automat în variabila globală errno, care este definită în antetul „errno.h”. Acest cod poate fi folosit pentru a identifica eroarea care a apărut.

Următorul este un extras cu erorile pe care funcția write() le poate genera și care sunt definite în antetul „errno.h”, împreună cu o scurtă descriere a fiecărei erori și a valorii întregi asociate:

Definiție Valoare în errno Eroare
DIN NOU unsprezece Încearcă din nou.
EBADF 9 Număr de fișier incorect.
EDESTADDRREQ 89 Este necesară adresa de destinație.
EDQUOT 122 Cotă depășită.
EFAULT 14 Adresă incorectă.
EFBIG 27 Fișier prea mare.
EINTR 4 Apelul de sistem a fost întrerupt.
ALEGEREA UNICA 22 Argument invalid.
EIO 5 Eroare I/O.
ENOSPC 28 Nu a mai rămas spațiu pe dispozitiv.
Superior 1 Operațiunea nu este permisă.

Cel mai simplu mod de a identifica o eroare este deschiderea unui comutator unde variabila errno este condiția de salt și fiecare caz este o definiție de eroare.

În continuare, să ne uităm la un exemplu în care încercăm să introducem un descriptor cu semn negativ, rezultând o eroare. Pentru a identifica o eroare, folosim condiția „dacă” pe care am văzut-o în fragmentul anterior. Pentru a-l identifica, deschidem un comutator cu cele mai frecvente trei erori pe care le poate produce această funcție.

#include

#include

#include

#include

#include

#include <șir.h>

#include

gol principal ( )

{

int fd ;

int n ;

char tampon [ 1024 ] = 'Salut Lume' ;

fd = deschis ( „Documente/example.txt” , O_RDWR ) ;

n = scrie ( - 2 , & tampon , strlen ( tampon ) ) ;

dacă ( n == - 1 ) {

intrerupator ( greseala ) {

caz EBADF : {

printf ( „Număr de fișier incorect. Eroare: %i \n ' , greseala ) ;

pauză ; }

caz ALEGEREA UNICA : {

printf ( „Argument nevalid. Eroare: %i \n ' , greseala ) ;

pauză ; }

caz EIO : {

printf ( „Eroare I/O . Eroare: %i \n ' , greseala ) ;

pauză ; }

}

}

}

După cum putem vedea în figura următoare, funcția write() returnează o eroare atunci când un descriptor invalid este transmis ca argument de intrare. Valoarea care este preluată din variabila errno este folosită ca o condiție de salt care ne permite să identificăm eroarea atunci când intrăm în cazul EBADF.

Concluzie

În acest articol Linux Hint, v-am arătat cum să utilizați funcția write() pentru a scrie în fișiere. V-am arătat sintaxa și descrierea teoretică a acestei funcții. De asemenea, am explicat metodele de detectare și identificare a erorilor, astfel încât să aveți instrumentele și tehnicile necesare pentru a rezolva rapid aceste probleme.

Pentru a vă ajuta să vedeți cum funcționează write(), am implementat utilizarea acestei funcții în exemple practice cu coduri și imagini care arată utilizarea acestei funcții și a altor funcții de procesare a fișierelor.

De asemenea, v-am arătat cum să selectați modul de deschidere a fișierului pentru a insera un text la începutul sau la sfârșitul fișierului și ce funcții sunt disponibile pentru a modifica aceste atribute.