Write() függvény C nyelven

Write Fuggveny C Nyelven



A programozás során a fájlkezelés olyan feladat, amelyben a programozónak folyékonyan kell járnia. A különféle megnyitási, olvasási és írási funkciók ismerete elengedhetetlen, mert mindig szükségünk van rájuk a fájlokban tárolt információk tárolására vagy elhelyezésére.

Ebben a Linux Hint cikkben megtudhatja, hogyan használhatja a write() függvényt a fájlok írásához.







Mindent elmagyarázunk erről az elláról, a szintaxisáról, a hívási módszerről, a bemeneti és kimeneti argumentumokról, az egyes esetekben elfogadott adatok típusáról és a helyes deklarálásról.



Ezután gyakorlati példákban alkalmazzuk a tanultakat, amelyeket kódrészletekkel és képekkel készítettünk, bemutatva a write() használatát a C nyelvben.



Annak érdekében, hogy átfogó ismeretekkel rendelkezzen a write() függvény használatáról, hozzáadtunk egy speciális részt, amely leírja a funkció használata során előforduló egyedi hibákat, valamint azok észlelését és azonosítását, így a előfordulásuk esetén a gyors megoldáshoz szükséges technikákat.





A Write() függvény szintaxisa C nyelvben

int ír ( int fd , üres * buf , size_t n ) ;

A Write() függvény leírása C nyelvben

A write() függvény egy nyitott fájlba ír. Ez a függvény a „buf” által mutatott puffer tartalmát a leíró által az „fd” bemeneti argumentumban megadott fájlba írja. Az „n” bemeneti argumentumban meg kell adni a fájlba írandó blokk méretét.

Ahhoz, hogy a write() függvénnyel írhassunk, a fájlt az open() függvénnyel kell megnyitni, és meg kell adni az O_RDONLY vagy O_RDWR attribútumokat. Ellenkező esetben ennek a funkciónak nincs hatása.



Ha a hívás sikeres, akkor visszaadja a beírt karakterek számát. Ha hiba történik írás közben, akkor -1-gyel egyenlő eredményt ad vissza. A hibát jelző azonosító kód az „errno.h” fejlécben definiált errno globális változóból kérhető le.

Később talál egy részt, ahol elmagyarázzuk, hogyan lehet észlelni és azonosítani a funkció leggyakoribb hibáit.

A write() függvény az „unistd.h” fejlécben van definiálva. Az attribútumokat és a fájl megnyitásának módját meghatározó jelzők az „fcntl.h” fájlban vannak meghatározva. Az open() és write() függvények használatához ezeket a fejléceket az alábbiak szerint kell szerepeltetnie a kódban:

#include

#include

Hogyan írjunk fájlba a Write() függvény használatával C nyelvben

Ebben a példában írunk egy „example.txt” nevű üres szöveges fájlt, amelyet korábban készítettünk a „Dokumentumok” könyvtárban.

Az első lépés a szükséges fejlécek beszúrása. A main() függvényen belül nyissa meg a fájlt az open() függvénnyel. Ehhez deklarálnunk kell az „fd” egész számot, amely fájlleíróként szolgál, és az 1024 karakteres „buf” puffertömböt, amely tartalmazza a fájlba írandó szöveget. Ebben a pufferben tároljuk a GCC kézikönyvoldalának első bekezdését, hogy beírjuk az „example.txt” fájlba.

Az open() függvény olvasási/írási módban történő megnyitása után a write() függvény meghívásával írunk a fájlba, és első bemeneti argumentumként az „fd” fájlleírót, másodikként a „buf” mutatót adjuk át. argumentum, és harmadik argumentumként a tömbben található karakterlánc mérete, amelyet az strlen() függvénnyel kapunk meg. Íme a példa kódja:

#include

#include

#include

#include

#include

#include

#include

üres fő- ( )

{

int fd ;

char puffer [ 1024 ] = 'Amikor meghívja a GCC-t, általában előfeldolgozást, fordítást, összeállítást és linkelést végez. Az általános opciók lehetővé teszik a folyamat leállítását egy közbenső szakaszban. Például a -c kapcsoló azt mondja, hogy ne futtassa a linkert. Ekkor a kimenet a következőkből áll: az assembler által kiadott objektumfájlok.' ;

fd = nyisd ki ( 'Dokumentumok/example.txt' , O_RDWR ) ;

ír ( fd , & puffer , strlen ( puffer ) ) ;

Bezárás ( fd ) ;

}

A következő ábrán ennek a kódnak a fordítását és végrehajtását láthatjuk a write() függvény által írt megnyitott fájllal együtt:

Szöveg hozzáadása egy fájl végéhez a Write() függvény segítségével C nyelvben

Ha egy fájlt az O_WRONLY vagy O_RDWR jelzők megadásával nyit meg, a kurzor az első pozícióba ugrik, és onnan kezdi el az írást.

Ha szöveget szeretne hozzáadni egy fájl végéhez, azt egy logikai VAGY művelettel kell megadni az O_WRONLY vagy O_RDWR jelzők és az O_ APPEND jelző között az open() függvény bemeneti flags argumentumában a fájl megnyitásakor. Így a kurzor a fájl végére kerül, és onnan kezdődik az írás. Ezenkívül az attribútumok és az írási mód megváltoztathatók, ha a fájlt az fcntl() függvénnyel megnyitják.

A következő ábrán egy kódot láthat, amely egy szöveget ad a fájl végéhez, amelyet az előző példában írtunk:

#include

#include

#include

#include

#include

#include

#include

üres fő- ( )

{

int fd ;

char puffer [ 1024 ] = 'Ez a szöveg hozzáadva. Ez a szöveg hozzáadva.' ;

fd = nyisd ki ( 'Dokumentumok/example.txt' , O_RDWR | O_APPEND ) ;

ír ( fd , & puffer , strlen ( puffer ) ) ;

Bezárás ( fd ) ;

}

A következő képen a hozzáadott szöveg látható. Amint látható, ezzel a nyitási metódussal a write() függvény a fájlba írt utolsó karakter helyén kezdi el az írást:

Hogyan lehet észlelni és azonosítani azokat a hibákat, amelyek a Write() függvény használatakor fordulhatnak elő a C nyelvben

A write() használata különféle hibákat generálhat. Amikor ez megtörténik, a függvény -1-gyel egyenlő eredményt ad vissza.

A legegyszerűbb módja annak, hogy meghatározzuk, hogy hiba történt-e, egy „if” feltétel használata, ahol a feltétel a -1 visszatérési értéke. Most pedig nézzük meg, hogyan használhatja ezt a módszert annak meghatározására, hogy történt-e hiba:

int n ;

n = ír ( fd , & puffer , strlen ( puffer ) ) ;

ha ( n == - 1 ) {

printf ( 'Hiba történt a fájl írása közben.' ) ;

}

Ha a write() függvény hibával tér vissza, akkor átvált az „if” utasításra, és kiírja a „ Hiba történt a fájl írása közben “.

Hiba esetén a rendszer automatikusan egy numerikus kódot tárol az errno globális változóban, amely az „errno.h” fejlécben van definiálva. Ez a kód használható a fellépő hiba azonosítására.

A következő kivonat a write() függvény által generált hibákról, amelyek az „errno.h” fejlécben vannak definiálva, az egyes hibák rövid leírásával és a kapcsolódó egész értékkel együtt:

Meghatározás Érték tévedésben Hiba
ÚJRA tizenegy Próbáld újra.
EBADF 9 Helytelen fájlszám.
EDESTADDRREQ 89 Meg kell adni a cél címét.
EDQUOT 122 Túllépte a kvótát.
FAULT 14 Helytelen cím.
EFBIG 27 A fájl túl nagy.
EINTR 4 A rendszerhívás megszakadt.
EGYEDI VÁLASZTÁS 22 Hibás érvelés.
EIO 5 I/O hiba.
ENOSPC 28 Nincs hely az eszközön.
Felső 1 A művelet nem engedélyezett.

A hiba azonosításának legegyszerűbb módja egy kapcsoló megnyitása, ahol az errno változó az ugrási feltétel, és minden eset egy hibadefiníció.

Ezután nézzünk meg egy példát, ahol megpróbálunk negatív előjelű leírót beírni, ami hibát eredményez. A hiba azonosításához az „if” feltételt használjuk, amelyet az előző részletben láttunk. Az azonosításhoz megnyitunk egy kapcsolót a három leggyakoribb hibával, amelyet ez a funkció okozhat.

#include

#include

#include

#include

#include

#include

#include

üres fő- ( )

{

int fd ;

int n ;

char puffer [ 1024 ] = 'Helló Világ' ;

fd = nyisd ki ( 'Dokumentumok/example.txt' , O_RDWR ) ;

n = ír ( - 2 , & puffer , strlen ( puffer ) ) ;

ha ( n == - 1 ) {

kapcsoló ( errno ) {

ügy EBADF : {

printf ( 'Rossz fájlszám. Hiba: %i \n ' , errno ) ;

szünet ; }

ügy EGYEDI VÁLASZTÁS : {

printf ( 'Érvénytelen argumentum. Hiba: %i \n ' , errno ) ;

szünet ; }

ügy EIO : {

printf ( 'I/O hiba . Hiba: %i \n ' , errno ) ;

szünet ; }

}

}

}

Amint az alábbi ábrán látható, a write() függvény hibát ad vissza, ha érvénytelen leírót adunk át bemeneti argumentumként. Az errno változóból kiolvasott érték ugrásfeltételként használatos, amely lehetővé teszi számunkra, hogy azonosítsuk a hibát, amikor belépünk az EBADF esetbe.

Következtetés

Ebben a Linux Hint cikkben megmutattuk, hogyan használhatjuk a write() függvényt a fájlok írására. Megmutattuk ennek a függvénynek a szintaxisát és elméleti leírását. Elmagyaráztuk a hibaészlelési és -azonosítási módszereket is, hogy rendelkezzen a szükséges eszközökkel és technikákkal a problémák gyors megoldásához.

A write() működésének megismerése érdekében gyakorlati példákban implementáltuk ennek a függvénynek a használatát kódokkal és képekkel, amelyek bemutatják ennek és a többi fájlfeldolgozó függvénynek a használatát.

Azt is megmutattuk, hogyan választhatja ki a fájlmegnyitási módot a fájl elejére vagy végére szöveg beszúrásához, és milyen funkciók állnak rendelkezésre ezen attribútumok megváltoztatásához.