Write() funkcija u jeziku C

Write Funkcija U Jeziku C



Upravljanje datotekama u programiranju je zadatak koji programer mora tečno obaviti. Poznavanje raznih funkcija otvaranja, čitanja i pisanja je bitno jer su nam uvijek potrebne za pohranjivanje ili raspolaganje informacijama koje su pohranjene u datotekama.

U ovom članku sa savjetima o Linuxu naučit ćete kako koristiti funkciju write() za pisanje datoteka.







Objasnit ćemo sve o ovoj elli, njezinoj sintaksi, metodi poziva, ulaznim i izlaznim argumentima, vrsti podataka koje prihvaća u svakom slučaju i kako je ispravno deklarirati.



Zatim primjenjujemo ono što smo naučili stavljajući korištenje ove funkcije u praktične primjere koje smo pripremili za vas s isječcima koda i slikama, pokazujući korištenje write() u jeziku C.



Kako biste imali sveobuhvatno znanje o korištenju funkcije write(), dodali smo poseban odjeljak koji opisuje pojedinačne pogreške koje se mogu pojaviti prilikom korištenja ove funkcije, kao i njihovu detekciju i identifikaciju, kako biste imali potrebne tehnike za brzo rješavanje u slučaju njihove pojave.





Sintaksa funkcije Write() u jeziku C

int pisati ( int F D , poništiti * buf , veličina_t n ) ;

Opis funkcije Write() u jeziku C

Funkcija write() piše u otvorenu datoteku. Ova funkcija zapisuje sadržaj međuspremnika na koji pokazuje 'buf' u datoteku koja je navedena u deskriptoru u ulaznom argumentu 'fd'. Veličina bloka koji se upisuje u datoteku mora biti navedena u ulaznom argumentu “n”.

Da biste mogli pisati pomoću funkcije write(), datoteka mora biti otvorena funkcijom open() i navedena u atributima O_RDONLY ili O_RDWR. U protivnom ova funkcija nema učinka.



Ako je poziv uspješan, vraća broj znakova koji su uneseni. Ako dođe do pogreške tijekom pisanja, vraća rezultat koji je jednak -1. Identifikacijski kod koji označava pogrešku može se dohvatiti iz globalne varijable errno koja je definirana u zaglavlju 'errno.h'.

Kasnije ćete pronaći odjeljak u kojem objašnjavamo kako otkriti i prepoznati najčešće pogreške ove funkcije.

Funkcija write() definirana je u zaglavlju “unistd.h”. Oznake koje definiraju atribute i način otvaranja datoteke definirane su u “fcntl.h”. Da biste koristili funkcije open() i write(), morate uključiti ova zaglavlja u svoj kod na sljedeći način:

#include

#include

Kako pisati u datoteku pomoću funkcije Write() u jeziku C

U ovom primjeru pišemo praznu tekstualnu datoteku pod nazivom “example.txt” koju smo ranije stvorili u direktoriju “Documents”.

Prvi korak je umetanje potrebnih zaglavlja. Unutar funkcije main() otvorite datoteku pomoću funkcije open(). Da bismo to učinili, moramo deklarirati cijeli broj “fd” koji služi kao deskriptor datoteke i niz međuspremnika od 1024 znaka “buf” koji sadrži tekst koji želimo napisati u datoteku. U ovom međuspremniku spremamo prvi odlomak GCC stranice s uputama kako bismo ga zapisali u datoteku 'example.txt'.

Nakon otvaranja datoteke s funkcijom open() u načinu čitanja/pisanja, upisujemo u datoteku pozivanjem funkcije write() i prosljeđivanjem deskriptora datoteke 'fd' kao prvog ulaznog argumenta, pokazivača 'buf' kao drugog argument, te veličina niza koji je sadržan u nizu kao treći argument, koji dobivamo funkcijom strlen(). Evo koda za ovaj primjer:

#include

#include

#include

#include

#include

#include

#include

poništiti glavni ( )

{

int F D ;

char pufer [ 1024 ] = 'Kada pozovete GCC, on obično radi pretprocesiranje, kompilaciju, asembler i povezivanje. Ukupne opcije vam omogućuju da zaustavite ovaj proces u srednjoj fazi. Na primjer, opcija -c kaže da se ne pokreće povezivač. Tada se izlaz sastoji od objektne datoteke koje ispisuje asembler.' ;

F D = otvoren ( 'Dokumenti/example.txt' , O_RDWR ) ;

pisati ( F D , i pufer , strlen ( pufer ) ) ;

Zatvoriti ( F D ) ;

}

Na sljedećoj slici vidimo kompilaciju i izvođenje ovog koda zajedno s otvorenom datotekom koju je zapisala funkcija write():

Kako dodati tekst na kraj datoteke pomoću funkcije Write() u jeziku C

Kada se datoteka otvori navođenjem zastavica O_WRONLY ili O_RDWR, kursor skače na prvo mjesto i od tamo počinje pisati.

Da biste dodali tekst na kraj datoteke, on mora biti naveden logičkom operacijom OR između oznaka O_WRONLY ili O_RDWR i oznake O_ APPEND u argumentu ulaznih oznaka funkcije open() kada se datoteka otvori. Na ovaj način, pokazivač se postavlja na kraj datoteke i od tamo počinje pisanje. Također, atributi i način pisanja mogu se promijeniti nakon otvaranja datoteke pomoću funkcije fcntl().

Na sljedećoj ilustraciji možete vidjeti kod koji dodaje tekst na kraj datoteke koju smo napisali u prethodnom primjeru:

#include

#include

#include

#include

#include

#include

#include

poništiti glavni ( )

{

int F D ;

char pufer [ 1024 ] = 'Ovaj tekst je dodan. Ovaj tekst je dodan.' ;

F D = otvoren ( 'Dokumenti/example.txt' , O_RDWR | O_DODAJ ) ;

pisati ( F D , i pufer , strlen ( pufer ) ) ;

Zatvoriti ( F D ) ;

}

Sljedeća slika prikazuje dodan tekst. Kao što vidite, s ovom metodom otvaranja, funkcija write() počinje pisati na mjestu posljednjeg znaka koji je zapisan u datoteku:

Kako otkriti i prepoznati pogreške koje se mogu pojaviti prilikom korištenja funkcije Write() u jeziku C

Korištenje write() može generirati razne pogreške. Kada se to dogodi, ova funkcija vraća rezultat koji je jednak -1.

Najlakši način da utvrdite je li došlo do pogreške je korištenje uvjeta 'if' gdje je uvjet povratna vrijednost -1. Pogledajmo sada kako pomoću ove metode možete utvrditi je li došlo do pogreške:

int n ;

n = pisati ( F D , i pufer , strlen ( pufer ) ) ;

ako ( n == - 1 ) {

printf ( 'Došlo je do pogreške prilikom pokušaja pisanja datoteke.' ) ;

}

Ako se funkcija write() vrati s pogreškom, prelazi na naredbu “if” i ispisuje poruku, “ Došlo je do pogreške prilikom pokušaja pisanja datoteke “.

Kada se dogodi pogreška, numerički kod automatski se pohranjuje u globalnu varijablu errno koja je definirana u zaglavlju 'errno.h'. Ovaj kod se može koristiti za identifikaciju pogreške koja se dogodila.

Slijedi izvadak s pogreškama koje funkcija write() može generirati i koje su definirane u zaglavlju 'errno.h', zajedno s kratkim opisom svake pogreške i pridružene vrijednosti cijelog broja:

Definicija Vrijednost u errno Greška
OPET jedanaest Pokušajte ponovno.
EBADF 9 Netočan broj datoteke.
EDESTADDRREQ 89 Potrebna je adresa odredišta.
EDQUOT 122 Premašena kvota.
GREŠKA 14 Netočna adresa.
EFBIG 27 Datoteka je prevelika.
EINTR 4 Sistemski poziv prekinut.
JEDAN IZBOR 22 Neispravan argument.
EIO 5 I/O greška.
ENOSPC 28 Nema više prostora na uređaju.
Gornji 1 Operacija nije dopuštena.

Najlakši način za identificiranje pogreške je otvaranje prekidača gdje je varijabla errno uvjet skoka, a svaki slučaj je definicija pogreške.

Zatim, pogledajmo primjer gdje pokušavamo unijeti deskriptor s negativnim predznakom, što rezultira pogreškom. Da bismo identificirali pogrešku, koristimo uvjet 'if' koji smo vidjeli u prethodnom isječku. Da bismo ga identificirali, otvaramo prekidač s tri najčešće pogreške koje ova funkcija može proizvesti.

#include

#include

#include

#include

#include

#include

#include

poništiti glavni ( )

{

int F D ;

int n ;

char pufer [ 1024 ] = 'Pozdrav svijete' ;

F D = otvoren ( 'Dokumenti/example.txt' , O_RDWR ) ;

n = pisati ( - 2 , i pufer , strlen ( pufer ) ) ;

ako ( n == - 1 ) {

sklopka ( pogrešno ) {

slučaj EBADF : {

printf ( 'Loš broj datoteke. Greška: %i \n ' , pogrešno ) ;

pauza ; }

slučaj JEDAN IZBOR : {

printf ( 'Nevažeći argument. Pogreška: %i \n ' , pogrešno ) ;

pauza ; }

slučaj EIO : {

printf ( 'U/I ​​pogreška. Pogreška: %i \n ' , pogrešno ) ;

pauza ; }

}

}

}

Kao što možemo vidjeti na sljedećoj slici, funkcija write() vraća pogrešku kada je nevažeći deskriptor proslijeđen kao ulazni argument. Vrijednost koja se dohvaća iz varijable errno koristi se kao uvjet skoka koji nam omogućuje da identificiramo pogrešku kada uđemo u slučaj EBADF.

Zaključak

U ovom članku o Linux savjetu, pokazali smo vam kako koristiti funkciju write() za pisanje u datoteke. Pokazali smo vam sintaksu i teorijski opis ove funkcije. Također smo objasnili metode otkrivanja i identifikacije pogrešaka kako biste imali potrebne alate i tehnike za brzo rješavanje ovih problema.

Kako bismo vam pomogli da vidite kako write() radi, implementirali smo korištenje ove funkcije u praktičnim primjerima s kodovima i slikama koje pokazuju upotrebu ove i drugih funkcija za obradu datoteka.

Također smo vam pokazali kako odabrati način otvaranja datoteke za umetanje teksta na početak ili kraj datoteke i koje su funkcije dostupne za promjenu tih atributa.