C'de Yazma Sistemi Çağrısı Nasıl Kullanılır

How Use Write System Call C



Sistem çağrısı, programlar ve Linux işletim sistemi çekirdeği arasında birincil ağ geçidi görevi görür. C programlama kariyeriniz boyunca neredeyse kesinlikle bir sistem çağrısına ihtiyaç duyacak olsanız da, ister olağanüstü üretkenlik ister belirli bir özellik stili hedefleyin, Glibc deposu veya popüler Linux dağıtımlarında bulunan diğer standart kitaplıklar, yazılımınızın büyük çoğunluğu için yeterli olacaktır. Gereksinimler. Bu rehberde C dilinde Write System çağrısı ile ilgili bir konsept oluşturacağız.

Sözdizimi:

#Dahil etmek

size_tyazı yazmak(int fd, const void*buf, size_t sayısı);

Yukarıdaki sözdiziminde, ilk satır sistem çağrıları için kitaplığı gösterir. İkinci satırda fd, aslında bir işlemin açık dosyasını belirten bir sayı olan bir dosya tanıtıcı anlamına gelir. *buf anahtar sözcüğü arabellek anlamına gelir. Bu, içindeki tüm verileri içerir. Sonraki sayımdır. Tampondan bir dosya tanıtıcısına yazılacak bayt sayısıdır.







Yükleme Önkoşulları:

Herhangi bir C dili kodunu çalıştırmak için önce Linux dağıtımında bazı paketleri kurmanız gerekir. Yazma sistemi çağrısı ile ilgili daha fazla bilgi görmek istiyorsanız, bunu yapmak için manpages-dev paketini kurmanız gerekir. Ctrl+Alt+T kısayol tuşunu kullanarak terminali açmak için. Açtıktan sonra, manpages yüklemek için aşağıdaki apt install komutunu ve ardından manpages-dev anahtar sözcüğünü yazın.



$sudouygunYüklemekmanpages-dev



Manpage'leri yüklemek biraz zaman alacaktır. Tamamlanmasını bekleyin.





Kurulumdan sonra, Shell'de aşağıdaki man komutu ile write system call ile ilgili ek bilgileri görebilirsiniz.



$adam 2 yazı yazmak

Yazma komutu için çıktı man sayfası aşağıda verilmiştir. Bununla ilgili bilgileri okuyabilirsiniz. Kılavuzdan çıkmak için q tuşuna basın.

Artık C dilinde çalışması için Linux sisteminize Gcc paketini kurmanın zamanı geldi. Bunun için kabuğu açın ve aşağıdaki apt install komutunu ve ardından gcc anahtar sözcüğünü yazın.

$sudouygunYüklemek gcc

Bu arada, kurulum sırasında, devam etmek için y'ye ve durdurmak için n'ye basarak bu kurulum eylemini onaylamanızı isteyebilir. Bu nedenle, y tuşuna dokunun ve Enter tuşuna basın.

Birkaç dakika içinde sisteminize kurulacak ve çıktının son satırları aşağıdaki anlık görüntüde gösterildiği gibi olacaktır.

Örnekler:

Linux dağıtımımızda bazı yazma sistem çağrısı örneklerine bakalım. Bu nedenle, komut satırı kabuğunu açın ve içinde nokta c uzantılı yeni bir C dosyası oluşturun. Hızlı bir şekilde oluşturmak ve açmak için aşağıdaki nano komutunu kullanmanız gerekir. Biz ona new.c olarak bir isim verdik.

$nanoyeni.c

Aşağıdaki pencere açılacaktır. Şimdi ekli kodu bu dosyaya yazmanız gerekiyor. Bu koda ilk olarak unistd.h kütüphanesini ekledik. Daha sonra ana fonksiyonu oluşturduk ve bu fonksiyon içerisinde bir write system call oluşturduk. Bu sistem çağrısında, ilk parametre dosya tanıtıcıdır. Bu durumda tamsayı 1, çıkış cihazı ekranını temsil eder ve sabittir. Böylece çıktımız ekranda gösterilecektir. İkinci parametre arabellek verilerini gösterir. Ona herhangi bir şey ekleyebilirsiniz. Ve son parametre, tampon parametresinde verilen veriler için sayım numarasını gösterir. Sayma sayısı olarak 5'ten bahsettiğimiz gibi, sadece tampon verinin ilk 5 baytını gösterecek ve kalan baytları görmezden gelecektir. Bu kodu Ctrl+S kısayol tuşunu kullanarak kaydedin ve Ctrl+X komutunu kullanarak bu dosyadan çıkın.

#Dahil etmek

Int ana()

{Yazı yazmak(1Aksa Yasin5);}

Şimdi terminalde, yeni oluşturulan bu kodu bir dosya adıyla derlemek için aşağıdaki gcc komutunu deneyin.

$gccyeni.c

Çalışma zamanında oluşturulan varsayılan a.out dosyasını kullanarak bu kodu kontrol edelim. Bu nedenle, yazma sistemi çağrısının çıktısını kontrol etmek için aşağıdaki a.out komutunu deneyin. Dosyayı mevcut dizinden seçmek için ./ ile kullanmalıyız.

$./a.out

Gördüğünüz çıktı 5 sayısı nedeniyle sadece Aksa kelimesini görüntülemiştir.

Kodumuzu biraz değiştirelim. Tampon verimiz Aqsa Yasin'de toplam 11 bayt olduğu için sayım sayısını 11 olarak değiştirdik. Yani bu sefer çıktı, Aqsa Yasin string verisinin tüm baytlarını gösterecektir. Bu dosyayı Ctrl+S kullanarak kaydedin ve Ctrl+X kısayol tuşunu kullanarak çıkın.

Linux dağıtımı için yeni kurulan gcc derleyicisini kullanarak güncellenen kodu derleyelim. Yeni.c olarak bir dosyanın adıyla birlikte aynı gcc komutunu deneyin.

$gccyeni.c

Şimdi aşağıdaki gibi önceki a.out komutunu kullanarak aynı kodun çıktısını görüntüleyin. Çıktı, arabelleğin tam dizesi Aqsa Yasin'i gösterir.

$./a.out

Arabellek verilerinin içerdiği toplam bayt sayısından daha büyük sayım sayısını aldığımızda kodun nasıl çalıştığını görelim. Bu yüzden sayımızı 30 olarak kullanıyoruz. Dosyayı kaydedip kapatın.

Aynı güncellenmiş dosyayı aşağıdaki gibi gcc komutunu kullanarak derleyin.

$gccyeni.c

Şimdi dosyayı a.out komutunu kullanarak yürütün ve çıktı, aşağıdaki anlık görüntü çıktısında gösterildiği gibi arabellek verilerini ve bununla birlikte bazı çöp değerlerini gösterecektir.$ ./a.out

Aynı dosyada aşağıdaki kodu kullanarak dosyaya yazılan toplam bayt sayısını da kontrol edebilirsiniz.

Kodu gcc komutuyla derleyin.

$gccyeni.c

Çıktı, a.out komutunu kullanarak arabellek verileri ve satır sonu dahil toplam bayt sayısını gösterir.

$./a.out

Çözüm:

Bu öğreticide, C'de Yazma sistem çağrısını kullanma konseptini detaylandırdık. Bu makaleyi kullanarak yazma sistemi çağrısı fikrini anlamak için tüm örnekleri deneyin.