Linux çekirdeği tarafından sağlanan sistem çağrıları, glibc aracılığıyla C’ye tanıtılır. Bir sistem çağrısı kullandığınızda, işletim sistemi ile iletişim kurarsınız ve dönüş üzerine işletim sistemi, sistem çağrısı işlevlerine döndürülen parametreler (dönüş değerleri) aracılığıyla sizinle iletişim kurar.
Sistem çağrısı istatistikleri:
Platform çağrısı, dosyaya ne zaman erişildiği gibi bir dosyanın durumunu kontrol etmek için Linux’ta yapılan bir sistem çağrısıdır. Sistem çağrısı stat() aslında dosyanın özniteliklerini döndürür. Düğüm dosyasının öznitelikleri esas olarak stat() işlevi tarafından döndürülür. Düğüm, dosyanın meta verilerini içerir. Düğüm şunları içerir: dosya türü, dosya boyutu, dosyaya erişim zamanı (değiştirilmiş, silinmiş), yani zaman damgaları ve dosyanın yolu, kullanıcı kimliği ve grup kimliği, dosyaya bağlantılar, dosya içeriğinin fiziksel adresi.
İnode, inode tablosunda tutulan dosyanın indeks numarası olan stat() sistem çağrısı için gerekli tüm verileri içerir diyebiliriz. Bir dosya oluşturulduğunda, o dosya için bir düğüm numarası oluşturulur. Sistem tabloları, istatistik sistem çağrısı kullanılarak görüntülenebilir.
C Stat sistemini çağırmanın sözdizimi şöyledir:
C programlama dilinde stat sistem çağrısını kullanmak için aşağıdaki başlık dosyasını eklemeniz gerekir:
Stat, bir dosyanın durumunu almak için kullanılır. C stat sistem çağrısı sözdizimi her işletim sistemi için aynı olmayabilir. Linux’ta platformu çağırmak için sözdizimi aşağıdaki gibidir:
int durum(Sabit miktarMektup*yolVeyapı durum *Meraklı)
İş türünün dönüşü intFonksiyon başarıyla yürütülürse, herhangi bir hata varsa 0, -1 döndürür.
Burada harf const *yol Dosya adını belirtir. Dosya yolu sembolik bir bağlantıysa, dosya adı yerine bağlantıyı belirtmeniz gerekir.
Daha sonra fonksiyonda a basit yapı Dosyayla ilgili veri veya bilgilerin, adı verilen bir işaretçi kullanılarak saklandığı yer Meraklı Parametre olarak girilir ve aramanın yürütülmesi sırasında doldurulur ve aramadan sonra kullanıcı tarafından okunabilir.
Devlet Yapısı:
Belirtilen ana yapı başlık dosyası aşağıdaki alanları içerir:
yapı durum
{
mod_t st_mode;
ino_t st_ino;
dev_t st_dev;
dev_t st_rdev;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
off_t st_size;
yapı st_atim zaman belirtimi;
yapı zaman belirtimi st_mtim;
yapı zaman belirtimi st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};
Tanılama:
- st_dev: Dosyamızın şu anda bulunduğu cihaz tanımlayıcısıdır.
- st_rdev: Bu alan, belirli bir dosyanın belirli bir cihazı temsil ettiğini açıklar.
- st_ino: Dosyanın inode numarası veya seri numarası. Bir dizin numarası olduğu için tüm dosyalar için benzersiz olmalıdır.
- st_size: st_size, bayt cinsinden dosya boyutudur.
- st_atime: Dosyaya en son ne zaman erişildi veya erişildi.
- st_ctime: Dosyanın durumunun veya izinlerinin en son değiştirildiği zaman.
- st_mtime: Dosyanın son değiştirilme zamanı.
- st_blacksize: Bu alan, G/Ç dosya sistemi için dosyadan dosyaya değişebilen tercih edilen blok boyutunu verir.
- st_blocks: Bu alan, toplam blok sayısını 512 baytın katları halinde söyler.
- st_nlink: Bu alan, sabit bağlantıların toplam sayısını gösterir.
- st_uid: Bu alan, kullanıcı kimliğini görüntüler.
- st_gid: Bu alan grup kimliğini görüntüler.
- st_mode: Dosyadaki izinleri ayarlar ve dosyadaki modları söyler. st_mode alanı için belirtilmesi gereken bayraklar şunlardır:
Bayraklar | Tanılama | etiket değeri |
---|---|---|
S_IFMT | Dosyanın değiştirilmiş değerini almak için kullanılan bir bit maskesi | 0170000 |
S_IFSOCK | Soket sabit dosya | 0140000 |
S_IFLINK | Sembolik bağlantı için sabit dosya | 0120000 |
S_IFREG | Normal dosya için sabit dosya | 0100000 |
S_IFBLK | Blok dosyası için sabit dosya | 0060000 |
S_IFDIR | dizin dosyası için dosya sabiti | 0040000 |
S_IFCHR | Profil için sabit dosya | 0020000 |
S_IFO | Sabit fifo dosyası | 0010000 |
S_ISUID | Kullanıcı kimliği bitini ayarlayın | 0004000 |
S_ISGID | Grup tanımlayıcı bitini ayarlayın | 0002000 |
S_ISVTX | Paylaşılan metni görüntüleyen yapışkan bir bit | 0001000 |
S_IRWXU | sahip izinleri (okuma, yazma, yürütme) | 00700 |
S_IRUSR | Sahip izinlerini oku | 00400 |
S_IWUSR | Sahibi için yazma izinleri | 00200 |
S_IXUSR | Sahip için yürütme izinleri | 00100 |
S_IRWXG | grup izinleri (okuma, yazma, yürütme) | 00070 |
S_IRGRP | Grup izinlerini oku | 00040 |
S_IWGRP | Grup için izinleri yazın | 00020 |
S_IXGRP | Grup izinlerini yürütün | 00010 |
S_IRWXO | Başkalarına verilen izinler (okuma, yazma, yürütme) | 00007 |
S_IROTH | Diğerleri için okuma izinleri | 00004 |
S_IWOTH | Başkaları için yazma izinleri | 00002 |
S_IXOTH | Başkaları için yürütme izinleri | 00001 |
Platform çağrısı nasıl kullanılır:
Aşağıdaki örnek, Linux, Ubuntu üzerinde C programlama dilinde stat sistem çağrısının nasıl kullanılacağını göstermektedir.
Örnek 1:
Aşağıdaki kodda dosya modunu bulacağız:
kod:
#birleştirmek için
#birleştirmek için
int o()
{
// İstatistik yapısına bir işaretçi
yapı İstatistik dosyası;
// sistem çağrı platformu
durum(“stat.c”Ve&dosya);
// st_mode’a erişim (stat yapısının veri üyesi)
Baskı(“st_mode = %o”Ve dosyast_mode);
dönüş0;
}
Programı aşağıdaki gibi derleyin ve çalıştırın:
Bu kodda, stat sistem çağrısında dosya adını ve ardından sfile olan stat yapısına işaretçiyi iletiyoruz. stat Struct işaretçisi daha sonra, printf deyimini kullanarak dosyanın modunu görüntüleyen st_mode öğesine erişmek için kullanılır.
Başlık dosyası, platform çağrısını kullanabilmeniz için kullanılır. ana dosya
Örnek 2:
Aşağıdaki kodda, stat sistem çağrısını kullanarak dosya hakkında bilgi alacağız:
kod:
#birleştirmek için
#birleştirmek için
#birleştirmek için
#birleştirmek için
Geçersiz dosya(MektupSabit miktar dosya adı[]);
int o(){
ssize_t’yi oku;
Mektup* tampon =0;
size_t buf_size =0;
Baskı(Kontrol edilecek dosyanın adını girin: \n“);
Okuman = Doğrultusunda olsun(&tamponVe&buf_sizeVe Temel);
eğer(Okuman <=0){
Baskı(Hat alınamadı\n“);
çıkış(1);
}
eğer(tampon[okuman–1]==“\n“){
tampon[okuman–1]=0;
}
int s=aç(tamponVeSADECE O_RD);
eğer(s== –1){
Baskı(“Dosya yok\n“);
çıkış(1);
}
diğer{
dosya(tampon);
}
Bedava(tampon);
dönüş0;
}
Geçersiz dosya(MektupSabit miktar dosya adı[]){
yapı İstatistik dosyası;
eğer(durum(dosya adıVe &dosya)== –1){
Baskı(“bir hata oluştu\n“);
}
// Altta yatan yapının veri üyelerine erişin
Baskı(“\nDosya st_uid%d \n“Vedosyast_uid);
Baskı(“\nst_blksize%ld dosyası \n“Vedosyast_blacksize);
Baskı(“\nDosya st_gid%d \n“Vedosyast_gid);
Baskı(“\nDosya st_blocks%ld \n“Vedosyast_blocks);
Baskı(“\nDosya st_size%ld \n“Vedosyast_size);
Baskı(“\nDosya st_nlink%u \n“Ve(imzasızint)dosyast_nlink);
Baskı(“\nDosya izinleri kullanıcısı\n“);
Baskı((dosyast_mode& S_IRUSR)?“s”:“-“);
Baskı((dosyast_mode& S_IWUSR)?“w”:“-“);
Baskı((dosyast_mode& S_IXUSR)?“x”:“-“);
Baskı(“\n“);
Baskı(“\nDosya izinlerini ayarla\n“);
Baskı((dosyast_mode& S_IRGRP)?“s”:“-“);
Baskı((dosyast_mode& S_IWGRP)?“w”:“-“);
Baskı((dosyast_mode& S_IXGRP)?“x”:“-“);
Baskı(“\n“);
Baskı(“\nDiğer dosya izinleri\n“);
Baskı((dosyast_mode& S_IROTH)?“s”:“-“);
Baskı((dosyast_mode& S_IWOTH)?“w”:“-“);
Baskı((dosyast_mode& S_IXOTH)?“x”:“-“);
Baskı(“\n“);
}
Üretmek:
Yukarıdaki C kodunda dosya adını girdik ve dosya yoksa program durdurulacaktır. Bu, aşağıdaki resimde gösterilmiştir:
Dosyaya sahipsek, dosya adını girdiğimiz sfile(n) işlevi çağrılır. İşlev içinde öncelikle Stat sistem çağrısını kullandık, eğer stat() -1 döndürürse hata olmamalıdır, bu nedenle bir mesaj yazdırılacak ve programın çalışması durdurulacaktır.
Daha sonra printf deyiminde, veri üyelerine erişmek için işlev adını ve nokta ayırıcıyı kullandık. basit yapı.
Ardından, st_mode makrolarına veya dosya modu bayraklarına geçiyoruz. Burada mantık ve operatör, ilgili modları yazdırmak için kullanılır. Belirtilen dosya (kullanıcı tarafından girilen dosya adı) için kullanıcı, grup ve diğer izinleri kontrol ettik.
Bununla, işletim sistemi çekirdeğinden dosyalar hakkında bilgi almak için C programlama dilinden stat sistem çağrısını nasıl kullanacağınızı öğrenebilirsiniz. Bir sorunuz varsa, yorumlar bölümünde bize söylemekten çekinmeyin.
Diğer gönderilerimize göz at
[wpcin-random-posts]
İlk Yorumu Siz Yapın