Funkce Write() v jazyce C

Funkce Write V Jazyce C



Správa souborů v programování je úkol, který musí programátor ovládat plynule. Znalost různých funkcí pro otevírání, čtení a zápis je nezbytná, protože je vždy potřebujeme k ukládání nebo likvidaci informací uložených v souborech.

V tomto článku Linux Hint se dozvíte, jak používat funkci write() k zápisu souborů.







Vysvětlíme vše o této ella, její syntaxi, metodě volání, vstupních a výstupních argumentech, typu dat, která v každém případě přijímá, a jak je správně deklarovat.



Poté, co jsme se naučili, aplikujeme použití této funkce na praktických příkladech, které jsme pro vás připravili s úryvky kódu a obrázky, které ukazují použití write() v jazyce C.



Abyste měli komplexní znalosti o použití funkce write(), přidali jsme speciální sekci, která popisuje jednotlivé chyby, které se mohou při používání této funkce vyskytnout, a také jejich detekci a identifikaci, abyste měli potřebné techniky pro rychlé řešení v případě jejich výskytu.





Syntaxe funkce Write() v jazyce C

int napsat ( int fd , prázdnota * buf , velikost_t n ) ;

Popis funkce Write() v jazyce C

Funkce write() zapisuje do otevřeného souboru. Tato funkce zapíše obsah vyrovnávací paměti, na kterou ukazuje „buf“, do souboru, který je specifikován svým deskriptorem ve vstupním argumentu „fd“. Velikost bloku, který má být zapsán do souboru, musí být specifikována ve vstupním argumentu „n“.

Aby bylo možné zapisovat pomocí funkce write(), musí být soubor otevřen pomocí funkce open() a specifikován v atributech O_RDONLY nebo O_RDWR. Jinak tato funkce nemá žádný účinek.



Pokud je volání úspěšné, vrátí počet zadaných znaků. Pokud při zápisu dojde k chybě, vrátí výsledek, který se rovná -1. Identifikační kód, který indikuje chybu, lze získat z globální proměnné errno, která je definována v záhlaví „errno.h“.

Později najdete část, kde vysvětlíme, jak zjistit a identifikovat nejčastější chyby této funkce.

Funkce write() je definována v hlavičce „unistd.h“. Příznaky, které definují atributy a režim otevření souboru, jsou definovány v „fcntl.h“. Chcete-li používat funkce open() a write(), musíte do kódu zahrnout tato záhlaví následovně:

#include

#include

Jak zapisovat do souboru pomocí funkce Write() v jazyce C

V tomto příkladu napíšeme prázdný textový soubor s názvem „example.txt“, který jsme dříve vytvořili v adresáři „Dokumenty“.

Prvním krokem je vložení potřebných hlaviček. Uvnitř funkce main() otevřete soubor pomocí funkce open(). K tomu potřebujeme deklarovat „fd“ celé číslo, které slouží jako deskriptor souboru, a 1024znakové pole bufferu „buf“, které obsahuje text, který chceme zapsat do souboru. V tomto bufferu uložíme první odstavec manuálové stránky GCC, abychom jej zapsali do souboru „example.txt“.

Po otevření souboru funkcí open() v režimu čtení/zápisu zapíšeme do souboru voláním funkce write() a předáním deskriptoru souboru „fd“ jako prvního vstupního argumentu, ukazatele „buf“ jako druhého argument a velikost řetězce, který je obsažen v poli jako třetí argument, který získáme funkcí strlen(). Zde je kód pro tento příklad:

#include

#include

#include

#include

#include

#include

#include <řetězec.h>

prázdnota hlavní ( )

{

int fd ;

char vyrovnávací paměť [ 1024 ] = 'Když vyvoláte GCC, normálně provede předzpracování, kompilaci, sestavení a propojení. Celkové možnosti vám umožní zastavit tento proces v přechodné fázi. Například volba -c říká, že se nemá spouštět linker. Potom se výstup skládá z objektové soubory výstup assembleru.' ;

fd = OTEVŘENO ( 'Documents/example.txt' , O_RDWR ) ;

napsat ( fd , & vyrovnávací paměť , strlen ( vyrovnávací paměť ) ) ;

zavřít ( fd ) ;

}

Na následujícím obrázku vidíme kompilaci a spuštění tohoto kódu spolu s otevřeným souborem, který je zapsán funkcí write():

Jak přidat text na konec souboru pomocí funkce Write() v jazyce C

Když je soubor otevřen zadáním příznaků O_WRONLY nebo O_RDWR, kurzor přeskočí na první pozici a začne psát odtud.

Chcete-li přidat text na konec souboru, musí být zadán logickou operací OR mezi příznaky O_WRONLY nebo O_RDWR a příznakem O_ APPEND v argumentu vstupních příznaků funkce open() při otevření souboru. Tímto způsobem se kurzor umístí na konec souboru a odtud začíná zápis. Po otevření souboru pomocí funkce fcntl() lze také změnit atributy a režim zápisu.

Na následujícím obrázku můžete vidět kód, který přidá text na konec souboru, který jsme napsali v předchozím příkladu:

#include

#include

#include

#include

#include

#include

#include <řetězec.h>

prázdnota hlavní ( )

{

int fd ;

char vyrovnávací paměť [ 1024 ] = 'Tento text je přidán. Tento text je přidán.' ;

fd = OTEVŘENO ( 'Documents/example.txt' , O_RDWR | O_APPEND ) ;

napsat ( fd , & vyrovnávací paměť , strlen ( vyrovnávací paměť ) ) ;

zavřít ( fd ) ;

}

Následující obrázek ukazuje přidaný text. Jak vidíte, s touto otevírací metodou začne funkce write() zapisovat na pozici posledního znaku, který je zapsán do souboru:

Jak zjistit a identifikovat chyby, které se mohou vyskytnout při použití funkce Write() v jazyce C

Použití write() může generovat různé chyby. Když k tomu dojde, tato funkce vrátí výsledek, který se rovná -1.

Nejjednodušší způsob, jak zjistit, zda došlo k chybě, je použít podmínku „if“, kde podmínkou je návratová hodnota -1. Nyní se podívejme, jak můžete tuto metodu použít k určení, zda došlo k chybě:

int n ;

n = napsat ( fd , & vyrovnávací paměť , strlen ( vyrovnávací paměť ) ) ;

-li ( n == - 1 ) {

printf ( 'Při pokusu o zápis souboru došlo k chybě.' ) ;

}

Pokud se funkce write() vrátí s chybou, přejde na příkaz „if“ a vypíše zprávu „ Při pokusu o zápis souboru došlo k chybě “.

Při výskytu chyby se číselný kód automaticky uloží do globální proměnné errno, která je definována v záhlaví „errno.h“. Tento kód lze použít k identifikaci chyby, ke které došlo.

Následuje výňatek s chybami, které může funkce write() generovat a které jsou definovány v záhlaví „errno.h“, spolu se stručným popisem každé chyby a související celočíselnou hodnotou:

Definice Hodnota v errno Chyba
ZNOVU jedenáct Zkus to znovu.
EBADF 9 Nesprávné číslo souboru.
EDESTADDRREQ 89 Je vyžadována cílová adresa.
EDQUOT 122 Překročena kvóta.
EFAULT 14 Nesprávná adresa.
EFBIG 27 Soubor je příliš velký.
EINTR 4 Systémové volání bylo přerušeno.
JEDEN VÝBĚR 22 Neplatný argument.
EIO 5 Chyba I/O.
ENOSPC 28 V zařízení nezbývá místo.
Horní 1 Operace není povolena.

Nejjednodušší způsob, jak identifikovat chybu, je otevřít přepínač, kde proměnná errno je podmínkou skoku a každý případ je definicí chyby.

Dále se podívejme na příklad, kdy se snažíme zadat deskriptor se záporným znaménkem, což vede k chybě. K identifikaci chyby používáme podmínku „if“, kterou jsme viděli v předchozím úryvku. Abychom to identifikovali, otevřeme přepínač se třemi nejčastějšími chybami, které tato funkce může způsobit.

#include

#include

#include

#include

#include

#include <řetězec.h>

#include

prázdnota hlavní ( )

{

int fd ;

int n ;

char vyrovnávací paměť [ 1024 ] = 'Ahoj světe' ;

fd = OTEVŘENO ( 'Documents/example.txt' , O_RDWR ) ;

n = napsat ( - 2 , & vyrovnávací paměť , strlen ( vyrovnávací paměť ) ) ;

-li ( n == - 1 ) {

přepínač ( errno ) {

pouzdro EBADF : {

printf ( 'Špatné číslo souboru. Chyba: %i \n ' , errno ) ;

přestávka ; }

pouzdro JEDEN VÝBĚR : {

printf ( 'Neplatný argument. Chyba: %i \n ' , errno ) ;

přestávka ; }

pouzdro EIO : {

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

přestávka ; }

}

}

}

Jak můžeme vidět na následujícím obrázku, funkce write() vrací chybu, když je jako vstupní argument předán neplatný deskriptor. Hodnota, která je načtena z proměnné errno, se používá jako skoková podmínka, která nám umožňuje identifikovat chybu, když vstoupíme do případu EBADF.

Závěr

V tomto článku Linux Hint jsme vám ukázali, jak používat funkci write() k zápisu do souborů. Ukázali jsme si syntaxi a teoretický popis této funkce. Vysvětlili jsme také metody detekce a identifikace chyb, abyste měli potřebné nástroje a techniky k rychlému řešení těchto problémů.

Abychom vám pomohli vidět, jak write() funguje, implementovali jsme použití této funkce v praktických příkladech s kódy a obrázky, které ukazují použití této a dalších funkcí pro zpracování souborů.

Také jsme vám ukázali, jak vybrat režim otevření souboru pro vložení textu na začátek nebo konec souboru a jaké funkce jsou k dispozici pro změnu těchto atributů.