Write()-funktio C-kielellä

Write Funktio C Kielella



Tiedostonhallinta ohjelmoinnissa on tehtävä, jossa ohjelmoijan tulee osata sujuvasti. Erilaisten avaus-, luku- ja kirjoitustoimintojen tuntemus on välttämätöntä, koska tarvitsemme niitä aina tiedostoihin tallennettujen tietojen tallentamiseen tai hävittämiseen.

Tässä Linux Hint -artikkelissa opit käyttämään write()-funktiota tiedostojen kirjoittamiseen.







Selitämme kaiken tästä ellasta, sen syntaksista, kutsumenetelmästä, syöttö- ja lähtöargumenteista, kussakin tapauksessa hyväksymän datan tyypistä ja kuinka se ilmoitetaan oikein.



Sitten sovellemme oppimiamme asettamalla tämän funktion käytön käytännön esimerkeiksi, jotka valmistelimme sinulle koodinpätkillä ja kuvilla, jotka osoittavat write()-funktion käytön C-kielellä.



Jotta sinulla olisi kattava tietämys write()-funktion käytöstä, olemme lisänneet erityisen osion, jossa kuvataan yksittäiset virheet, joita voi esiintyä tätä toimintoa käytettäessä, sekä niiden havaitseminen ja tunnistaminen, jotta sinulla on tarvittavat tekniikat nopean ratkaisun löytämiseksi niiden esiintyessä.





Write()-funktion syntaksi C-kielessä

int kirjoittaa ( int fd , mitätön * buf , koko_t n ) ;

Write()-funktion kuvaus C-kielellä

Write()-funktio kirjoittaa avoimeen tiedostoon. Tämä funktio kirjoittaa puskurin sisällön, johon 'buf' osoittaa, tiedostoon, jonka sen kuvaaja määrittää 'fd'-syöttöargumentissa. Tiedostoon kirjoitettavan lohkon koko on määritettävä 'n'-syöttöargumentissa.

Jotta voidaan kirjoittaa write()-funktiolla, tiedosto on avattava open()-funktiolla ja määritettävä O_RDONLY- tai O_RDWR-attribuuteissa. Muuten tällä toiminnolla ei ole vaikutusta.



Jos puhelu onnistuu, se palauttaa syötettyjen merkkien määrän. Jos kirjoitettaessa tapahtuu virhe, se palauttaa tuloksen, joka on yhtä suuri kuin -1. Virheen ilmaiseva tunnistekoodi voidaan hakea globaalista errno-muuttujasta, joka on määritelty 'errno.h'-otsikossa.

Myöhemmin löydät osion, jossa selitämme kuinka havaita ja tunnistaa tämän toiminnon yleisimmät virheet.

Write()-funktio määritellään 'unistd.h'-otsikossa. Liput, jotka määrittävät attribuutit ja tiedoston avaamistilan, määritellään tiedostossa 'fcntl.h'. Jos haluat käyttää open()- ja write()-funktioita, sinun on sisällytettävä nämä otsikot koodiisi seuraavasti:

#include

#include

Kuinka kirjoittaa tiedostoon Write()-funktiolla C-kielessä

Tässä esimerkissä kirjoitamme tyhjän tekstitiedoston nimeltä 'example.txt', jonka loimme aiemmin 'Dokumentit'-hakemistoon.

Ensimmäinen vaihe on lisätä tarvittavat otsikot. Avaa main()-funktion sisällä tiedosto open()-funktiolla. Tätä varten meidän on ilmoitettava 'fd'-kokonaisluku, joka toimii tiedoston kuvaajana, ja 1024-merkkinen 'buf'-puskuritaulukko, joka sisältää tekstin, jonka haluamme kirjoittaa tiedostoon. Tallennamme tähän puskuriin GCC-manuaalisivun ensimmäisen kappaleen ja kirjoitamme sen 'example.txt'-tiedostoon.

Avattuamme tiedoston open()-funktiolla luku/kirjoitustilassa, kirjoitamme tiedostoon kutsumalla write()-funktiota ja välittämällä 'fd'-tiedoston kuvaajan ensimmäiseksi syöttöargumentiksi ja 'buf'-osoittimen toiseksi. argumentti ja kolmantena argumenttina taulukon sisältämän merkkijonon koko, jonka saamme strlen()-funktiolla. Tässä on tämän esimerkin koodi:

#include

#include

#include

#include

#include

#include

#include

mitätön pää ( )

{

int fd ;

hiiltyä puskuri [ 1024 ] = 'Kun kutsut GCC:tä, se tavallisesti suorittaa esikäsittelyn, käännöksen, kokoonpanon ja linkityksen. Kokonaisasetukset mahdollistavat tämän prosessin pysäyttämisen välivaiheessa. Esimerkiksi -c-optiolla sanotaan, että linkkeriä ei saa suorittaa. Sitten tulos koostuu seuraavista: kokoajan tuottamat objektitiedostot.' ;

fd = avata ( 'Dokumentit/esimerkki.txt' , O_RDWR ) ;

kirjoittaa ( fd , & puskuri , strlen ( puskuri ) ) ;

kiinni ( fd ) ;

}

Seuraavassa kuvassa näemme tämän koodin käännöksen ja suorituksen yhdessä avatun tiedoston kanssa, joka on kirjoitettu write()-funktiolla:

Tekstin lisääminen tiedoston loppuun Write()-funktiolla C-kielellä

Kun tiedosto avataan määrittämällä liput O_WRONLY tai O_RDWR, kohdistin hyppää ensimmäiseen kohtaan ja alkaa kirjoittaa siitä.

Jos haluat lisätä tekstin tiedoston loppuun, se on määritettävä loogisella TAI-operaatiolla O_WRONLY- tai O_RDWR- ja O_ APPEND-lipun välillä open()-funktion input flags -argumentissa, kun tiedosto avataan. Näin kohdistin sijoitetaan tiedoston loppuun ja kirjoittaminen alkaa sieltä. Myös attribuutteja ja kirjoitustilaa voidaan muuttaa, kun tiedosto avataan fcntl()-funktiolla.

Seuraavassa kuvassa näet koodin, joka lisää tekstin edellisessä esimerkissä kirjoittamamme tiedoston loppuun:

#include

#include

#include

#include

#include

#include

#include

mitätön pää ( )

{

int fd ;

hiiltyä puskuri [ 1024 ] = 'Tämä teksti on lisätty. Tämä teksti on lisätty.' ;

fd = avata ( 'Dokumentit/esimerkki.txt' , O_RDWR | O_APPEND ) ;

kirjoittaa ( fd , & puskuri , strlen ( puskuri ) ) ;

kiinni ( fd ) ;

}

Seuraavassa kuvassa näkyy lisätty teksti. Kuten näet, tällä avausmenetelmällä write()-funktio aloittaa kirjoittamisen viimeisen tiedostoon kirjoitetun merkin kohdasta:

Kuinka havaita ja tunnistaa virheet, joita voi ilmetä käytettäessä Write()-funktiota C-kielessä

Write():n käyttö voi aiheuttaa erilaisia ​​virheitä. Kun näin tapahtuu, tämä funktio palauttaa tuloksen, joka on yhtä suuri kuin -1.

Helpoin tapa määrittää, onko virhe tapahtunut, on käyttää 'jos'-ehtoa, jossa ehto on palautusarvo -1. Katsotaanpa nyt, kuinka voit käyttää tätä menetelmää määrittääksesi, onko tapahtunut virhe:

int n ;

n = kirjoittaa ( fd , & puskuri , strlen ( puskuri ) ) ;

jos ( n == - 1 ) {

printf ( 'Tiedostoa kirjoitettaessa tapahtui virhe.' ) ;

}

Jos write()-funktio palauttaa virheen, se siirtyy 'if'-lauseeseen ja tulostaa viestin ' Tiedostoa kirjoitettaessa tapahtui virhe '.

Kun virhe tapahtuu, numeerinen koodi tallennetaan automaattisesti globaaliin errno-muuttujaan, joka on määritelty 'errno.h'-otsikossa. Tämän koodin avulla voidaan tunnistaa tapahtunut virhe.

Seuraavassa on ote virheistä, joita write()-funktio voi luoda ja jotka on määritelty 'errno.h'-otsikossa, sekä lyhyt kuvaus kustakin virheestä ja siihen liittyvästä kokonaisluvusta:

Määritelmä Arvo errno Virhe
UUDELLEEN yksitoista Yritä uudelleen.
EBADF 9 Virheellinen tiedostonumero.
EDESTADDRREQ 89 Kohdeosoite vaaditaan.
EDQUOT 122 Kiintiö ylitetty.
EFAULT 14 Virheellinen osoite.
EFBIG 27 Tiedosto liian suuri.
EINTR 4 Järjestelmäpuhelu keskeytetty.
YKSI VALINTA 22 Virheellinen argumentti.
EIO 5 I/O-virhe.
ENOSPC 28 Laitteessa ei ole tilaa jäljellä.
Yläosa 1 Toimintaa ei sallita.

Helpoin tapa tunnistaa virhe on avata kytkin, jossa errno-muuttuja on hyppyehto ja jokainen tapaus on virheen määritelmä.

Katsotaanpa seuraavaksi esimerkkiä, jossa yritämme syöttää kuvaajan negatiivisella merkillä, mikä johtaa virheeseen. Käytämme virheen tunnistamiseen 'jos'-ehtoa, jonka näimme edellisessä katkelmassa. Sen tunnistamiseksi avaamme kytkimen, jossa on kolme yleisintä virhettä, joita tämä toiminto voi aiheuttaa.

#include

#include

#include

#include

#include

#include

#include

mitätön pää ( )

{

int fd ;

int n ;

hiiltyä puskuri [ 1024 ] = 'Hei maailma' ;

fd = avata ( 'Dokumentit/esimerkki.txt' , O_RDWR ) ;

n = kirjoittaa ( - 2 , & puskuri , strlen ( puskuri ) ) ;

jos ( n == - 1 ) {

vaihtaa ( errno ) {

tapaus EBADF : {

printf ( 'Virheellinen tiedostonumero. Virhe: %i \n ' , errno ) ;

tauko ; }

tapaus YKSI VALINTA : {

printf ( 'Virheellinen argumentti. Virhe: %i \n ' , errno ) ;

tauko ; }

tapaus EIO : {

printf ( 'I/O-virhe . Virhe: %i \n ' , errno ) ;

tauko ; }

}

}

}

Kuten seuraavasta kuvasta nähdään, write()-funktio palauttaa virheen, kun syöteargumenttina välitetään virheellinen kuvaaja. Errno-muuttujasta haettua arvoa käytetään hyppyehtona, jonka avulla voimme tunnistaa virheen, kun syötetään EBADF-tapaus.

Johtopäätös

Tässä Linux Hint -artikkelissa näytimme sinulle, kuinka voit käyttää write()-funktiota tiedostojen kirjoittamiseen. Näimme sinulle tämän funktion syntaksin ja teoreettisen kuvauksen. Selvitimme myös virheiden havaitsemis- ja tunnistamismenetelmät, jotta sinulla on tarvittavat työkalut ja tekniikat näiden ongelmien nopeaan ratkaisemiseen.

Auttaaksemme sinua ymmärtämään, kuinka write() toimii, toteutimme tämän toiminnon käytön käytännön esimerkeissä koodeilla ja kuvilla, jotka osoittavat tämän ja muiden tiedostojenkäsittelytoimintojen käyttöä.

Näimme myös, kuinka voit valita tiedoston avaamistilan lisätäksesi tekstin tiedoston alkuun tai loppuun, ja mitä toimintoja on saatavilla näiden määritteiden muuttamiseksi.