Funkcija Write() v jeziku C

Funkcija Write V Jeziku C



Upravljanje datotek v programiranju je naloga, ki jo mora programer tekoče obvladati. Poznavanje različnih funkcij odpiranja, branja in pisanja je bistveno, ker jih vedno potrebujemo za shranjevanje ali odstranjevanje informacij, ki so shranjene v datotekah.

V tem članku z nasveti za Linux se boste naučili, kako uporabljati funkcijo write() za pisanje datotek.







Razložili bomo vse o tej elli, njeni sintaksi, klicni metodi, vhodnih in izhodnih argumentih, vrsti podatkov, ki jih sprejme v vsakem primeru, in kako jih pravilno deklarirati.



Nato uporabimo, kar smo se naučili, tako da uporabimo to funkcijo v praktičnih primerih, ki smo jih pripravili za vas z delčki kode in slikami, ki prikazujejo uporabo write() v jeziku C.



Da bi imeli celovito znanje o uporabi funkcije write(), smo dodali poseben razdelek, kjer so opisane posamezne napake, ki se lahko pojavijo pri uporabi te funkcije, ter njihovo odkrivanje in prepoznavanje, tako da imate potrebne tehnike za hitro rešitev v primeru njihovega nastanka.





Sintaksa funkcije Write() v jeziku C

int pisati ( int fd , praznina * buf , velikost_t n ) ;

Opis funkcije Write() v jeziku C

Funkcija write() piše v odprto datoteko. Ta funkcija zapiše vsebino vmesnega pomnilnika, na katerega kaže »buf«, v datoteko, ki jo določa njen deskriptor v vhodnem argumentu »fd«. Velikost bloka, ki bo zapisan v datoteko, mora biti navedena v vhodnem argumentu »n«.

Da bi lahko pisali s funkcijo write(), je treba datoteko odpreti s funkcijo open() in podati v atributih O_RDONLY ali O_RDWR. V nasprotnem primeru ta funkcija nima učinka.



Če je klic uspešen, vrne število vnesenih znakov. Če med pisanjem pride do napake, vrne rezultat, ki je enak -1. Identifikacijsko kodo, ki označuje napako, je mogoče pridobiti iz globalne spremenljivke errno, ki je definirana v glavi »errno.h«.

Kasneje boste našli razdelek, v katerem pojasnjujemo, kako zaznati in prepoznati najpogostejše napake te funkcije.

Funkcija write() je definirana v glavi »unistd.h«. Zastavice, ki določajo atribute in način za odpiranje datoteke, so definirane v »fcntl.h«. Če želite uporabljati funkciji open() in write(), morate te glave vključiti v svojo kodo, kot sledi:

#include

#include

Kako pisati v datoteko s funkcijo Write() v jeziku C

V tem primeru napišemo prazno besedilno datoteko z imenom 'example.txt', ki smo jo prej ustvarili v imeniku 'Dokumenti'.

Prvi korak je vstavljanje potrebnih glav. Znotraj funkcije main() odprite datoteko s funkcijo open(). Da bi to naredili, moramo deklarirati celo število 'fd', ki služi kot deskriptor datoteke, in 1024-mestno matriko medpomnilnikov 'buf', ki vsebuje besedilo, ki ga želimo zapisati v datoteko. V tem medpomnilniku shranimo prvi odstavek strani priročnika GCC, da ga zapišemo v datoteko »example.txt«.

Ko odpremo datoteko s funkcijo open() v načinu branja/pisanja, pišemo v datoteko tako, da pokličemo funkcijo write() in posredujemo deskriptor datoteke »fd« kot prvi vhodni argument, kazalec »buf« kot drugi argument, ter velikost niza, ki je v matriki kot tretji argument, ki ga pridobimo s funkcijo strlen(). Tukaj je koda za ta primer:

#include

#include

#include

#include

#include

#include

#include

praznina glavni ( )

{

int fd ;

char medpomnilnik [ 1024 ] = 'Ko pokličete GCC, ta običajno izvede predprocesiranje, prevajanje, sestavljanje in povezovanje. Splošne možnosti vam omogočajo, da ustavite ta proces na vmesni stopnji. Na primer, možnost -c pravi, da se povezovalnik ne izvaja. Nato je izhod sestavljen iz objektne datoteke, ki jih izpiše asembler.' ;

fd = odprto ( 'Dokumenti/example.txt' , O_RDWR ) ;

pisati ( fd , & medpomnilnik , strlen ( medpomnilnik ) ) ;

blizu ( fd ) ;

}

Na naslednji sliki vidimo prevajanje in izvajanje te kode skupaj z odprto datoteko, ki jo zapiše funkcija write():

Kako dodati besedilo na konec datoteke s funkcijo Write() v jeziku C

Ko se datoteka odpre z določitvijo zastavic O_WRONLY ali O_RDWR, kurzor skoči na prvo mesto in od tam začne pisati.

Če želite dodati besedilo na konec datoteke, ga morate določiti z logično operacijo ALI med zastavicama O_WRONLY ali O_RDWR in zastavico O_ APPEND v argumentu vhodnih zastavic funkcije open(), ko je datoteka odprta. Tako se kazalec postavi na konec datoteke in od tam se začne pisanje. Poleg tega je mogoče spremeniti atribute in način pisanja, ko je datoteka odprta s funkcijo fcntl().

Na naslednji ilustraciji lahko vidite kodo, ki doda besedilo na konec datoteke, ki smo jo napisali v prejšnjem primeru:

#include

#include

#include

#include

#include

#include

#include

praznina glavni ( )

{

int fd ;

char medpomnilnik [ 1024 ] = 'To besedilo je dodano. To besedilo je dodano.' ;

fd = odprto ( 'Dokumenti/example.txt' , O_RDWR | O_APPEND ) ;

pisati ( fd , & medpomnilnik , strlen ( medpomnilnik ) ) ;

blizu ( fd ) ;

}

Naslednja slika prikazuje dodano besedilo. Kot lahko vidite, s to metodo odpiranja funkcija write() začne pisati na mestu zadnjega znaka, ki je zapisan v datoteko:

Kako zaznati in prepoznati napake, ki se lahko pojavijo pri uporabi funkcije Write() v jeziku C

Uporaba write() lahko povzroči različne napake. Ko se to zgodi, ta funkcija vrne rezultat, ki je enak -1.

Najlažji način za ugotavljanje, ali je prišlo do napake, je uporaba pogoja »če«, kjer je pogoj vrnjena vrednost -1. Zdaj pa poglejmo, kako lahko s to metodo ugotovite, ali je prišlo do napake:

int n ;

n = pisati ( fd , & medpomnilnik , strlen ( medpomnilnik ) ) ;

če ( n == - 1 ) {

printf ( 'Med poskusom pisanja datoteke je prišlo do napake.' ) ;

}

Če se funkcija write() vrne z napako, preide na stavek “if” in natisne sporočilo, “ Med poskusom pisanja datoteke je prišlo do napake “.

Ko pride do napake, se številčna koda samodejno shrani v globalno spremenljivko errno, ki je definirana v glavi »errno.h«. To kodo lahko uporabite za identifikacijo napake, do katere je prišlo.

Sledi odlomek z napakami, ki jih lahko ustvari funkcija write() in so definirane v glavi »errno.h«, skupaj s kratkim opisom vsake napake in pripadajoče vrednosti celega števila:

Opredelitev Vrednost v errno Napaka
SPET enajst Poskusi ponovno.
EBADF 9 Nepravilna številka datoteke.
EDESTADDRREQ 89 Potreben je ciljni naslov.
EDQUOT 122 Presežena kvota.
NAPAKA 14 Napačen naslov.
EFBIG 27 Datoteka je prevelika.
EINTR 4 Sistemski klic prekinjen.
ENOTNA IZBIRA 22 Neveljaven argument.
EPN 5 V/I napaka.
ENOSPC 28 Na napravi ni več prostora.
Zgornji 1 Operacija ni dovoljena.

Napako najlažje prepoznate tako, da odprete stikalo, kjer je spremenljivka errno pogoj skoka, vsak primer pa je definicija napake.

Nato si poglejmo primer, kjer poskušamo vnesti deskriptor z negativnim predznakom, kar povzroči napako. Za prepoznavanje napake uporabimo pogoj »če«, ki smo ga videli v prejšnjem delčku. Da jo prepoznamo, odpremo stikalo s tremi najpogostejšimi napakami, ki jih ta funkcija lahko povzroči.

#include

#include

#include

#include

#include

#include

#include

praznina glavni ( )

{

int fd ;

int n ;

char medpomnilnik [ 1024 ] = 'Pozdravljen, svet' ;

fd = odprto ( 'Dokumenti/example.txt' , O_RDWR ) ;

n = pisati ( - 2 , & medpomnilnik , strlen ( medpomnilnik ) ) ;

če ( n == - 1 ) {

stikalo ( napaka ) {

Ovitek EBADF : {

printf ( »Slaba številka datoteke. Napaka: %i \n ' , napaka ) ;

odmor ; }

Ovitek ENOTNA IZBIRA : {

printf ( 'Neveljaven argument. Napaka: %i \n ' , napaka ) ;

odmor ; }

Ovitek EPN : {

printf ( 'V/I napaka. Napaka: %i \n ' , napaka ) ;

odmor ; }

}

}

}

Kot lahko vidimo na naslednji sliki, funkcija write() vrne napako, ko je kot vhodni argument posredovan neveljaven deskriptor. Vrednost, ki je pridobljena iz spremenljivke errno, se uporablja kot pogoj skoka, ki nam omogoča identifikacijo napake, ko vstopimo v primer EBADF.

Zaključek

V tem članku z nasveti za Linux smo vam pokazali, kako uporabljati funkcijo write() za pisanje v datoteke. Pokazali smo vam sintakso in teoretični opis te funkcije. Razložili smo tudi metode odkrivanja in prepoznavanja napak, tako da imate potrebna orodja in tehnike za hitro reševanje teh težav.

Da bi vam pomagali videti, kako deluje write(), smo implementirali uporabo te funkcije v praktičnih primerih s kodami in slikami, ki prikazujejo uporabo te in drugih funkcij za obdelavo datotek.

Pokazali smo vam tudi, kako izbrati način odprtja datoteke za vstavljanje besedila na začetek ali konec datoteke in katere funkcije so na voljo za spreminjanje teh atributov.