Funkcia Write() v jazyku C

Funkcia Write V Jazyku C



Správa súborov v programovaní je úloha, ktorú musí programátor ovládať plynule. Znalosť rôznych funkcií otvárania, čítania a zápisu je nevyhnutná, pretože ich vždy potrebujeme na ukladanie alebo likvidáciu informácií, ktoré sú uložené v súboroch.

V tomto článku Linux Hint sa dozviete, ako používať funkciu write() na zapisovanie súborov.







Vysvetlíme všetko o tejto ella, jej syntax, metódu volania, vstupné a výstupné argumenty, typ údajov, ktoré v každom prípade akceptuje, a ako ich správne deklarovať.



Potom aplikujeme to, čo sme sa naučili, uvedením použitia tejto funkcie do praktických príkladov, ktoré sme pre vás pripravili s útržkami kódu a obrázkami, ktoré ukazujú použitie write() v jazyku C.



Aby ste mali komplexné znalosti o používaní funkcie write(), pridali sme špeciálnu časť, ktorá popisuje jednotlivé chyby, ktoré môžu pri používaní tejto funkcie nastať, ako aj ich detekciu a identifikáciu, aby ste mali potrebné techniky na rýchle riešenie v prípade ich výskytu.





Syntax funkcie Write() v jazyku C

int písať ( int fd , neplatné * buf , size_t n ) ;

Popis funkcie Write() v jazyku C

Funkcia write() zapisuje do otvoreného súboru. Táto funkcia zapíše obsah vyrovnávacej pamäte, na ktorú ukazuje „buf“, do súboru, ktorý je špecifikovaný jej deskriptorom vo vstupnom argumente „fd“. Veľkosť bloku, ktorý sa má zapísať do súboru, musí byť špecifikovaná vo vstupnom argumente „n“.

Aby bolo možné zapisovať pomocou funkcie write(), súbor musí byť otvorený pomocou funkcie open() a špecifikovaný v atribútoch O_RDONLY alebo O_RDWR. V opačnom prípade nemá táto funkcia žiadny účinok.



Ak je volanie úspešné, vráti počet zadaných znakov. Ak sa pri zápise vyskytne chyba, vráti výsledok, ktorý sa rovná -1. Identifikačný kód, ktorý indikuje chybu, je možné získať z globálnej premennej errno, ktorá je definovaná v hlavičke „errno.h“.

Neskôr nájdete časť, kde vysvetlíme, ako odhaliť a identifikovať najčastejšie chyby tejto funkcie.

Funkcia write() je definovaná v hlavičke „unistd.h“. Príznaky, ktoré definujú atribúty a režim otvorenia súboru, sú definované v „fcntl.h“. Ak chcete použiť funkcie open() a write(), musíte do kódu zahrnúť tieto hlavičky takto:

#include

#include

Ako zapisovať do súboru pomocou funkcie Write() v jazyku C

V tomto príklade napíšeme prázdny textový súbor s názvom „example.txt“, ktorý sme predtým vytvorili v adresári „Dokumenty“.

Prvým krokom je vloženie potrebných hlavičiek. Vo funkcii main() otvorte súbor pomocou funkcie open(). Aby sme to dosiahli, musíme deklarovať celé číslo „fd“, ktoré slúži ako deskriptor súboru, a 1024-znakové pole vyrovnávacej pamäte „buf“, ktoré obsahuje text, ktorý chceme zapísať do súboru. V tejto vyrovnávacej pamäti uložíme prvý odsek manuálovej stránky GCC, aby sme ho zapísali do súboru „example.txt“.

Po otvorení súboru funkciou open() v režime čítania/zápisu zapíšeme do súboru zavolaním funkcie write() a ako prvý vstupný argument odošleme deskriptor súboru „fd“, ako druhý ukazovateľ „buf“. argument a veľkosť reťazca, ktorý je obsiahnutý v poli ako tretí argument, ktorý získame pomocou funkcie strlen(). Tu je kód pre tento príklad:

#include

#include

#include

#include

#include

#include

#include

neplatné Hlavná ( )

{

int fd ;

char vyrovnávacej pamäte [ 1024 ] = 'Keď vyvoláte GCC, zvyčajne vykoná predspracovanie, kompiláciu, zostavenie a prepojenie. Celkové možnosti vám umožňujú zastaviť tento proces v prechodnom štádiu. Napríklad voľba -c hovorí, že sa nemá spustiť linker. Potom sa výstup skladá z objektové súbory, ktoré vygeneruje assembler.' ;

fd = OTVORENÉ ( 'Documents/example.txt' , O_RDWR ) ;

písať ( fd , & vyrovnávacej pamäte , strlen ( vyrovnávacej pamäte ) ) ;

Zavrieť ( fd ) ;

}

Na nasledujúcom obrázku vidíme kompiláciu a spustenie tohto kódu spolu s otvoreným súborom, ktorý je zapísaný funkciou write():

Ako pridať text na koniec súboru pomocou funkcie Write() v jazyku C

Keď sa súbor otvorí zadaním príznakov O_WRONLY alebo O_RDWR, kurzor preskočí na prvú pozíciu a začne písať odtiaľ.

Ak chcete pridať text na koniec súboru, musí byť špecifikovaný logickou operáciou OR medzi príznakmi O_WRONLY alebo O_RDWR a príznakom O_ APPEND v argumente vstupných príznakov funkcie open() pri otvorení súboru. Takto sa kurzor umiestni na koniec súboru a odtiaľ sa začne písať. Po otvorení súboru pomocou funkcie fcntl() je možné zmeniť aj atribúty a režim zápisu.

Na nasledujúcom obrázku môžete vidieť kód, ktorý pridáva text na koniec súboru, ktorý sme napísali v predchádzajúcom príklade:

#include

#include

#include

#include

#include

#include

#include

neplatné Hlavná ( )

{

int fd ;

char vyrovnávacej pamäte [ 1024 ] = 'Tento text je pridaný. Tento text je pridaný.' ;

fd = OTVORENÉ ( 'Documents/example.txt' , O_RDWR | O_APPEND ) ;

písať ( fd , & vyrovnávacej pamäte , strlen ( vyrovnávacej pamäte ) ) ;

Zavrieť ( fd ) ;

}

Nasledujúci obrázok zobrazuje pridaný text. Ako vidíte, pri tejto metóde otvárania funkcia write() začne písať na pozícii posledného znaku, ktorý je zapísaný do súboru:

Ako zistiť a identifikovať chyby, ktoré sa môžu vyskytnúť pri používaní funkcie Write() v jazyku C

Použitie write() môže generovať rôzne chyby. Keď sa to stane, táto funkcia vráti výsledok, ktorý sa rovná -1.

Najjednoduchší spôsob, ako zistiť, či sa vyskytla chyba, je použiť podmienku „if“, kde podmienkou je návratová hodnota -1. Teraz sa pozrime, ako môžete použiť túto metódu na určenie, či sa vyskytla chyba:

int n ;

n = písať ( fd , & vyrovnávacej pamäte , strlen ( vyrovnávacej pamäte ) ) ;

ak ( n == - 1 ) {

printf ( 'Pri pokuse o zápis súboru sa vyskytla chyba.' ) ;

}

Ak sa funkcia write() vráti s chybou, prejde na príkaz „if“ a vypíše správu „ Pri pokuse o zápis súboru sa vyskytla chyba “.

Pri výskyte chyby sa číselný kód automaticky uloží do globálnej premennej errno, ktorá je definovaná v hlavičke „errno.h“. Tento kód možno použiť na identifikáciu chyby, ktorá sa vyskytla.

Nasleduje úryvok s chybami, ktoré môže funkcia write() generovať a ktoré sú definované v hlavičke „errno.h“, spolu so stručným popisom každej chyby a priradenou celočíselnou hodnotou:

Definícia Hodnota v errno Chyba
ZNOVU jedenásť Skúste to znova.
EBADF 9 Nesprávne číslo súboru.
EDESTADDRREQ 89 Vyžaduje sa cieľová adresa.
EDQUOT 122 Prekročená kvóta.
EFAULT 14 Nesprávna adresa.
EFBIG 27 Súbor je príliš veľký.
EINTR 4 Systémový hovor bol prerušený.
JEDEN VÝBER 22 Neplatný argument.
EIO 5 I/O chyba.
ENOSPC 28 Na zariadení nie je dostatok miesta.
Horná 1 Operácia nie je povolená.

Najjednoduchší spôsob, ako identifikovať chybu, je otvoriť prepínač, kde premenná errno je stav skoku a každý prípad je definícia chyby.

Ďalej sa pozrime na príklad, v ktorom sa pokúšame zadať deskriptor so záporným znamienkom, čo vedie k chybe. Na identifikáciu chyby používame podmienku „if“, ktorú sme videli v predchádzajúcom úryvku. Aby sme to identifikovali, otvoríme prepínač s tromi najbežnejšími chybami, ktoré môže táto funkcia spôsobiť.

#include

#include

#include

#include

#include

#include

#include

neplatné Hlavná ( )

{

int fd ;

int n ;

char vyrovnávacej pamäte [ 1024 ] = 'Ahoj svet' ;

fd = OTVORENÉ ( 'Documents/example.txt' , O_RDWR ) ;

n = písať ( - 2 , & vyrovnávacej pamäte , strlen ( vyrovnávacej pamäte ) ) ;

ak ( n == - 1 ) {

prepínač ( errno ) {

prípad EBADF : {

printf ( 'Chybné číslo súboru. Chyba: %i \n ' , errno ) ;

prestávka ; }

prípad JEDEN VÝBER : {

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

prestávka ; }

prípad EIO : {

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

prestávka ; }

}

}

}

Ako môžeme vidieť na nasledujúcom obrázku, funkcia write() vracia chybu, keď je ako vstupný argument odovzdaný neplatný deskriptor. Hodnota získaná z premennej errno sa používa ako skoková podmienka, ktorá nám umožňuje identifikovať chybu pri vstupe do prípadu EBADF.

Záver

V tomto článku Linux Hint sme vám ukázali, ako používať funkciu write() na zapisovanie do súborov. Ukázali sme si syntax a teoretický popis tejto funkcie. Vysvetlili sme tiež metódy detekcie a identifikácie chýb, aby ste mali potrebné nástroje a techniky na rýchle vyriešenie týchto problémov.

Aby sme vám pomohli vidieť, ako funguje write(), implementovali sme použitie tejto funkcie v praktických príkladoch s kódmi a obrázkami, ktoré ukazujú použitie tejto a iných funkcií spracovania súborov.

Tiež sme vám ukázali, ako zvoliť režim otvorenia súboru na vloženie textu na začiatok alebo koniec súboru a aké funkcie sú k dispozícii na zmenu týchto atribútov.