C Dilinde Write() İşlevi

C Dilinde Write Islevi



Programlamada dosya yönetimi, programcının akıcı olması gereken bir görevdir. Çeşitli açma, okuma ve yazma işlevlerine ilişkin bilgi önemlidir, çünkü dosyalarda depolanan bilgileri depolamak veya elden çıkarmak için bunlara her zaman ihtiyaç duyarız.

Bu Linux İpucu makalesinde, dosyaları yazmak için write() işlevini nasıl kullanacağınızı öğreneceksiniz.







Bu ella, sözdizimi, çağrı yöntemi, giriş ve çıkış argümanları, her durumda kabul ettiği veri türü ve doğru şekilde nasıl bildirileceği hakkında her şeyi açıklayacağız.



Daha sonra bu fonksiyonun kullanımını C dilinde write() kullanımını gösteren kod parçacıkları ve görsellerle sizler için hazırladığımız pratik örneklere koyarak öğrendiklerimizi uyguluyoruz.



write() işlevinin kullanımı hakkında kapsamlı bir bilgiye sahip olmanız için, bu işlevi kullanırken oluşabilecek bireysel hataların yanı sıra bunların tespit edilmesini ve tanımlanmasını açıklayan özel bir bölüm ekledik. meydana gelmeleri durumunda hızlı bir çözüm için gerekli teknikler.





C Dilinde Write() İşlevinin Sözdizimi

int yazmak ( int fd , geçersiz * buf , size_t N ) ;

C Dilinde Write() İşlevinin Açıklaması

write() işlevi açık bir dosyaya yazar. Bu işlev, 'buf' ile işaret edilen arabelleğin içeriğini, 'fd' giriş bağımsız değişkeninde tanımlayıcısı tarafından belirtilen dosyaya yazar. Dosyaya yazılacak bloğun boyutu “n” giriş argümanında belirtilmelidir.

write() fonksiyonu ile yazılabilmesi için dosyanın open() fonksiyonu ile açılması ve O_RDONLY veya O_RDWR özniteliklerinde belirtilmesi gerekir. Aksi takdirde, bu işlevin bir etkisi yoktur.



Arama başarılı olursa, girilen karakter sayısını döndürür. Yazarken bir hata oluşursa, -1'e eşit bir sonuç döndürür. Hatayı gösteren tanımlama kodu “errno.h” başlığında tanımlanan errno global değişkeninden alınabilir.

Daha sonra, bu işlevin en yaygın hatalarını nasıl tespit edip tanımlayacağımızı açıkladığımız bir bölüm bulacaksınız.

write() fonksiyonu “unistd.h” başlığında tanımlanmıştır. Dosyayı açmak için öznitelikleri ve modu tanımlayan bayraklar “fcntl.h” içinde tanımlanmıştır. open() ve write() işlevlerini kullanmak için bu başlıkları kodunuza aşağıdaki gibi eklemelisiniz:

#include

#include

C Dilinde Write() İşlevini Kullanarak Bir Dosyaya Nasıl Yazılır

Bu örnekte “Documents” dizinine daha önce oluşturduğumuz “example.txt” isimli boş bir text dosyasını yazıyoruz.

İlk adım, gerekli başlıkları eklemektir. main() işlevinin içinde, dosyayı open() işleviyle açın. Bunu yapmak için, dosya tanıtıcısı görevi gören “fd” tamsayısını ve dosyaya yazmak istediğimiz metni içeren 1024 karakterlik “buf” tampon dizisini bildirmemiz gerekiyor. Bu tamponda, “example.txt” dosyasına yazmak için GCC man sayfasının ilk paragrafını saklıyoruz.

Dosyayı open() fonksiyonu ile read/write modunda açtıktan sonra write() fonksiyonunu çağırıp birinci giriş argümanı olarak “fd” dosya tanıtıcısını, ikinci giriş argümanı olarak “buf” işaretçisini geçirerek dosyaya yazıyoruz. argümanı ve strlen() fonksiyonu ile elde ettiğimiz üçüncü argüman olarak dizide bulunan dizgenin boyutu. İşte bu örneğin kodu:

#include

#include

#include

#include

#include

#include

#include

geçersiz ana ( )

{

int fd ;

karakter tampon [ 1024 ] = 'GCC'yi çağırdığınızda, normalde ön işleme, derleme, derleme ve bağlama yapar. Genel seçenekler, bu işlemi bir ara aşamada durdurmanıza izin verir. Örneğin, -c seçeneği, bağlayıcıyı çalıştırmamanızı söyler. Ardından çıktı şunlardan oluşur: derleyici tarafından çıkarılan nesne dosyaları.' ;

fd = açık ( 'Belgeler/example.txt' , O_RDWR ) ;

yazmak ( fd , & tampon , strlen ( tampon ) ) ;

kapalı ( fd ) ;

}

Aşağıdaki şekilde, write() fonksiyonu tarafından yazılan açık dosya ile bu kodun derlenmesini ve çalıştırılmasını görüyoruz:

C Dilinde Write() Fonksiyonu İle Dosyanın Sonuna Metin Ekleme

O_WRONLY veya O_RDWR bayrakları belirtilerek bir dosya açıldığında, imleç ilk konuma atlar ve oradan yazmaya başlar.

Bir dosyanın sonuna bir metin eklemek için, dosya açıldığında open() işlevinin giriş bayrakları bağımsız değişkenindeki O_WRONLY veya O_RDWR bayrakları ile O_APEND bayrağı arasındaki mantıksal OR işlemiyle belirtilmelidir. Böylece imleç dosyanın sonuna gelir ve yazmaya oradan başlar. Ayrıca, dosya fcntl() işleviyle açıldığında nitelikler ve yazma modu değiştirilebilir.

Aşağıdaki çizimde, önceki örnekte yazdığımız dosyanın sonuna bir metin ekleyen bir kod görebilirsiniz:

#include

#include

#include

#include

#include

#include

#include

geçersiz ana ( )

{

int fd ;

karakter tampon [ 1024 ] = 'Bu metin eklendi. Bu metin eklendi.' ;

fd = açık ( 'Belgeler/example.txt' , O_RDWR | O_APPEND ) ;

yazmak ( fd , & tampon , strlen ( tampon ) ) ;

kapalı ( fd ) ;

}

Aşağıdaki resimde eklenen metin gösterilmektedir. Gördüğünüz gibi bu açılış metodu ile write() fonksiyonu dosyaya yazılan son karakterin konumundan yazmaya başlıyor:

C Dilinde Write() İşlevini Kullanırken Oluşabilecek Hatalar Nasıl Tespit Edilir ve Belirlenir

write() kullanmak çeşitli hatalara neden olabilir. Bu olduğunda, bu işlev -1'e eşit bir sonuç döndürür.

Bir hatanın oluşup oluşmadığını belirlemenin en kolay yolu, koşulun -1 dönüş değeri olduğu bir 'if' koşulu kullanmaktır. Şimdi, bir hata oluşup oluşmadığını belirlemek için bu yöntemi nasıl kullanabileceğinizi görelim:

int N ;

N = yazmak ( fd , & tampon , strlen ( tampon ) ) ;

eğer ( N == - 1 ) {

printf ( 'Dosyayı yazmaya çalışırken bir hata oluştu.' ) ;

}

write() işlevi bir hatayla dönerse, 'if' ifadesine geçer ve '' mesajını yazdırır. Dosyayı yazmaya çalışırken bir hata oluştu “.

Bir hata oluştuğunda, “errno.h” başlığında tanımlanan errno global değişkeninde otomatik olarak sayısal bir kod saklanır. Bu kod, meydana gelen hatayı tanımlamak için kullanılabilir.

Aşağıda, write() işlevinin oluşturabileceği ve 'errno.h' başlığında tanımlanan hataların yanı sıra her bir hatanın ve ilişkili tamsayı değerinin kısa bir açıklaması yer almaktadır:

Tanım errno'daki değer Hata
TEKRAR onbir Tekrar deneyin.
EBADF 9 Yanlış dosya numarası.
EDESTADDRREQ 89 Hedef adres gerekli.
EDQUOT 122 Kota aşıldı.
HATA 14 Yanlış adres.
EFBİG 27 Dosya çok büyük.
EINTR 4 Sistem çağrısı kesildi.
TEK SEÇİM 22 Geçersiz argüman.
EIO 5 G/Ç hatası.
ENOSPC 28 Cihazda boş alan kalmadı.
Üst 1 İşleme izin verilmiyor.

Bir hatayı tanımlamanın en kolay yolu, errno değişkeninin atlama koşulu olduğu ve her durumun bir hata tanımı olduğu bir anahtar açmaktır.

Ardından, eksi işaretli bir tanımlayıcı girmeye çalıştığımız ve hatayla sonuçlandığımız bir örneğe bakalım. Bir hatayı tanımlamak için, önceki snippet'te gördüğümüz 'eğer' koşulunu kullanırız. Tanımlamak için, bu işlevin üretebileceği en yaygın üç hatayı içeren bir anahtar açıyoruz.

#include

#include

#include

#include

#include

#include

#include

geçersiz ana ( )

{

int fd ;

int N ;

karakter tampon [ 1024 ] = 'Selam Dünya' ;

fd = açık ( 'Belgeler/example.txt' , O_RDWR ) ;

N = yazmak ( - 2 , & tampon , strlen ( tampon ) ) ;

eğer ( N == - 1 ) {

anahtar ( hata ) {

dava EBADF : {

printf ( 'Hatalı dosya numarası. Hata: %i \N ' , hata ) ;

kırmak ; }

dava TEK SEÇİM : {

printf ( 'Geçersiz bağımsız değişken. Hata: %i \N ' , hata ) ;

kırmak ; }

dava EIO : {

printf ( 'G/Ç hatası . Hata: %i \N ' , hata ) ;

kırmak ; }

}

}

}

Aşağıdaki şekilde görebileceğimiz gibi, write() işlevi, giriş argümanı olarak geçersiz bir tanımlayıcı iletildiğinde bir hata döndürür. errno değişkeninden alınan değer, EBADF durumuna girdiğimizde hatayı tanımlamamızı sağlayan atlama koşulu olarak kullanılır.

Çözüm

Bu Linux İpucu makalesinde, dosyalara yazmak için write() işlevini nasıl kullanacağınızı gösterdik. Size bu fonksiyonun sözdizimini ve teorik açıklamasını gösterdik. Bu sorunları hızlı bir şekilde çözmek için gerekli araç ve tekniklere sahip olmanız için hata algılama ve tanımlama yöntemlerini de açıkladık.

write()'ın nasıl çalıştığını görmenize yardımcı olmak için, bu işlevin kullanımını, bunun ve diğer dosya işleme işlevlerinin kullanımını gösteren kodlar ve resimlerle pratik örneklerde uyguladık.

Ayrıca dosyanın başına veya sonuna bir metin eklemek için dosya açma modunu nasıl seçeceğinizi ve bu nitelikleri değiştirmek için hangi işlevlerin mevcut olduğunu gösterdik.