Tutorial Linux Sistem Panggilan Stat

Stat System Call Linux Tutorial



Panggilan sistem yang disediakan oleh kernel linux didedahkan dalam bahasa pengaturcaraan C melalui glibc. Apabila panggilan sistem digunakan, anda berkomunikasi dengan OS dan sekembalinya OS berkomunikasi dengan anda melalui parameter yang dikembalikan ke fungsi panggilan sistem (nilai kembali).

Panggilan Sistem Stat:

Panggilan sistem stat adalah panggilan sistem di Linux untuk memeriksa status fail seperti untuk memeriksa kapan fail tersebut diakses. Panggilan sistem stat () sebenarnya mengembalikan atribut fail. Atribut fail inode pada dasarnya dikembalikan oleh fungsi Stat (). Inode mengandungi metadata fail. Inode mengandungi: jenis fail, ukuran fail, ketika file diakses (diubah, dihapus) yang merupakan cap waktu, dan jalur fail, ID pengguna dan ID kumpulan, pautan fail , dan alamat fizikal kandungan fail.







Kita boleh mengatakan bahawa inode mengandungi semua data yang diperlukan untuk panggilan sistem stat () dan itu adalah nombor indeks untuk fail yang disimpan dalam jadual inode. Setiap kali anda membuat fail, nombor inode untuk fail itu dibuat. Dengan menggunakan sistem panggilan stat, jadual sistem dapat dilihat.



Sintaks panggilan sistem C Stat:

Untuk menggunakan panggilan sistem stat dalam bahasa pengaturcaraan C, anda harus memasukkan fail tajuk berikut:



#sertakan

Stat digunakan untuk mendapatkan status fail. Sintaks panggilan sistem C stat mungkin tidak sama untuk setiap sistem operasi. Di Linux sintaks untuk panggilan sistem stat adalah seperti berikut:





intnegeri(penyambung char *jalan, strukturnegeri*buf)

Jenis pengembalian fungsi di int, jika fungsi tersebut berhasil dijalankan, 0 dikembalikan jika ada kesalahan, -1 akan dikembalikan.

Di sini laluan const * menentukan nama fail. Sekiranya jalur fail adalah pautan simbolik, maka anda perlu menentukan pautan dan bukannya nama fail.



Kemudian dalam fungsi kita mempunyai struktur stat di mana data atau maklumat mengenai fail disimpan yang menggunakan penunjuk bernama buf, yang diserahkan sebagai paramteter dan diisi semasa pelaksanaan panggilan dan dapat dibaca oleh pengguna selepas panggilan.

Struktur stat:

Struktur stat yang ditentukan dalam fail tajuk mengandungi bidang berikut:

strukturnegeri
{
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_tst_saiz;
strukturtimspec st_atim;
strukturtimspec st_mtim;
strukturtimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Penerangan:

  1. st_dev: Ini adalah ID peranti tempat fail kami berada sekarang.
  2. st_rdev: Medan ini menerangkan bahawa fail tertentu mewakili peranti tertentu.
  3. st_ino: Ini adalah nombor inode atau nombor siri fail. Oleh kerana ia adalah nombor indeks, maka ia harus unik untuk semua fail
  4. st_saiz: st_size adalah ukuran fail dalam bait.
  5. st_atime: Ini adalah kali terakhir atau terakhir ketika fail diakses.
  6. st_ctime: Ini adalah waktu terakhir di mana status atau kebenaran fail diubah.
  7. st_mtime: Ini adalah masa terakhir di mana fail itu diubah.
  8. st_blksize: Medan ini memberikan ukuran blok yang disukai untuk sistem fail I / O yang mungkin berbeza dari fail ke fail.
  9. sekatan st_: Medan ini memberitahu jumlah blok dalam gandaan 512 bait.
  10. st_nlink: Medan ini memberitahu jumlah pautan keras.
  11. st_uid: Medan ini menunjukkan ID pengguna.
  12. st_gid: Medan ini menunjukkan ID kumpulan.
  13. st_mode: Ini menunjukkan izin pada file, memberitahu mode pada file. Berikut adalah bendera yang harus ditentukan untuk medan st_mode:
Bendera Penerangan Nilai Bendera
S_IFMT Bitmask digunakan untuk mendapatkan nilai mod fail 0170000
S_IFSOCK Pemalar fail soket 0140000
S_IFLINK Pemalar fail pautan simbolik 0120000
S_IFREG Pemalar fail untuk fail biasa 0100000
S_IFBLK Pemalar fail untuk fail blok 0060000
S_IFDIR Pemalar fail untuk fail direktori 0040000
S_IFCHR Pemalar fail untuk fail watak 0020000
S_IFIFO Pemalar fail fifo 0010000
S_ISUID Tetapkan bit ID Pengguna 0004000
S_ISGID Tetapkan bit ID Kumpulan 0002000
S_ISVTX Bit melekit yang menunjukkan teks yang dikongsi 0001000
S_IRWXU Kebenaran Pemilik (baca, tulis, laksanakan) 00700
S_IRUSR Baca Kebenaran untuk pemilik 00400
S_IWUSR Tulis Kebenaran untuk pemilik 00200
S_IXUSR Jalankan Kebenaran untuk pemilik 00100
S_IRWXG Kebenaran Kumpulan (baca, tulis, laksanakan) 00070
S_IRGRP Baca Kebenaran untuk kumpulan 00040
S_IWGRP Tulis Kebenaran untuk kumpulan 00020
S_IXGRP Jalankan Kebenaran untuk kumpulan 00010
S_IRWXO Kebenaran untuk orang lain (membaca, menulis, melaksanakan) 00007
S_IROTH Baca Kebenaran untuk orang lain 00004
S_IWOTH Tulis Kebenaran untuk orang lain 00002
S_IXOTH Laksanakan Kebenaran untuk orang lain 00001

Cara menggunakan panggilan sistem Stat:

Contoh berikut menunjukkan cara menggunakan panggilan sistem stat dalam bahasa pengaturcaraan C di Linux, Ubuntu.

CONTOH 1:

Dalam kod berikut kita akan mencari mod fail:

KOD:

#sertakan
#sertakan
intutama()
{
// penunjuk ke stat struct
struktursfile negeri;

// panggilan sistem stat
negeri('stat.c', &sfile);

// mengakses st_mode (data anggota stat stat)
printf ('st_mode =% o',sfile.st_mode);
kembali 0;
}

Menyusun dan menjalankan pengembalian program seperti di bawah:

Dalam kod ini, kami telah memberikan nama fail dalam panggilan sistem stat dan kemudian penunjuk ke stat struct yang sfile. Pointer ke stat struct kemudian digunakan untuk mengakses st_mode yang memaparkan mod fail menggunakan pernyataan printf.

Fail tajuk digunakan sehingga anda dapat menggunakan panggilan sistem stat. Fail header adalah fail pustaka input / output standard sehingga anda dapat menggunakan printf atau scanf dalam kod C anda.

CONTOH 2:

Dalam kod berikut kita akan mendapatkan maklumat mengenai fail menggunakan panggilan sistem stat:

KOD:

#sertakan
#sertakan
#sertakan
#sertakan

batalsfile(char penyambungnama fail[]);

intutama(){
ssize_t membaca;
char*penyangga= 0;
saiz_tbuf_size= 0;

printf ('Masukkan nama fail untuk diperiksa: n');
membaca=garis panduan(&penyangga, &buf_size,stdin);

sekiranya (membaca<=0 ){
printf ('getline gagal n');
jalan keluar (1);
}

sekiranya (penyangga[membaca-1] == ' n'){
penyangga[membaca-1] = 0;
}

ints=buka(penyangga,O_RDONLY);
sekiranya(s== -1){
printf ('Fail tidak ada n');
jalan keluar (1);
}
yang lain{
sfile(penyangga);
}
percuma (penyangga);
kembali 0;
}

batalsfile(char penyambungnama fail[]){

struktursfile negeri;

sekiranya(negeri(nama fail, &sfile)== -1){
printf ('Kesalahan Berlaku n');
}

// Mengakses data anggota stat stat
printf (' nFail st_uid% d n',sfile.st_uid);
printf (' nFail st_blksize% ld n',sfile.st_blksize);
printf (' nFail st_gid% d n',sfile.st_gid);
printf (' nFail st_blocks% ld n',sfile.sekatan st_);
printf (' nFail st_size% ld n',sfile.st_saiz);
printf (' nFail st_nlink% u n',(tidak bertandatangan int)sfile.st_nlink);
printf (' nPengguna Kebenaran Fail n');
printf ((sfile.st_mode &S_IRUSR)? 'r':'-');
printf ((sfile.st_mode &S_IWUSR)? 'dalam':'-');
printf ((sfile.st_mode &S_IXUSR)? 'x':'-');
printf (' n');
printf (' nKumpulan Kebenaran Fail n');
printf ((sfile.st_mode &S_IRGRP)? 'r':'-');
printf ((sfile.st_mode &S_IWGRP)? 'dalam':'-');
printf ((sfile.st_mode &S_IXGRP)? 'x':'-');
printf (' n');
printf (' nKebenaran Fail Lain n');
printf ((sfile.st_mode &S_IROTH)? 'r':'-');
printf ((sfile.st_mode &S_IWOTH)? 'dalam':'-');
printf ((sfile.st_mode &S_IXOTH)? 'x':'-');
printf (' n');
}

PENGELUARAN:

Dalam kod C di atas, kami telah memasukkan nama fail dan jika fail tersebut tidak ada maka pelaksanaan program akan dihentikan. Ini ditunjukkan dalam gambar berikut:

Sekiranya fail kita ada, fungsi sfile (n) akan dipanggil di mana kita telah memberikan nama fail tersebut. Di dalam fungsi, pertama-tama kita telah menggunakan panggilan sistem Stat, jika stat () mengembalikan -1 maka mesti ada kesalahan sehingga pesan akan dicetak dan pelaksanaan program akan dihentikan.

Kemudian dalam pernyataan printf kami telah menggunakan nama fungsi dan pemisah titik untuk mengakses anggota data stat struktur .

Kemudian untuk mod fail kami telah mengakses makro atau bendera st_mode. Di sini logik dan operator digunakan untuk mencetak mod masing-masing. Kami telah memeriksa kebenaran untuk pengguna, kumpulan, dan lain-lain untuk fail yang ditentukan (nama fail yang dimasukkan oleh pengguna).

Dengan ini anda dapat melihat bagaimana menggunakan panggilan sistem stat dari bahasa pengaturcaraan C untuk mendapatkan maklumat dari kernel OS mengenai fail. Sekiranya anda mempunyai pertanyaan, sila beritahu kami melalui bahagian komen.