Tutorial Panggilan Sistem Stat Linux

Stat System Call Linux Tutorial



Panggilan sistem yang disediakan oleh kernel linux diekspos dalam bahasa pemrograman C melalui glibc. Saat panggilan sistem digunakan, Anda berkomunikasi dengan OS dan saat kembali OS berkomunikasi kepada Anda melalui parameter yang dikembalikan ke fungsi panggilan sistem (nilai pengembalian).

Panggilan Sistem Stat:

Stat system call adalah panggilan sistem di Linux untuk memeriksa status suatu file seperti untuk memeriksa kapan file tersebut diakses. Panggilan sistem stat() sebenarnya mengembalikan atribut file. Atribut file dari sebuah inode pada dasarnya dikembalikan oleh fungsi Stat(). Sebuah inode berisi metadata file. Sebuah inode berisi: jenis file, ukuran file, kapan file diakses (diubah, dihapus) yaitu cap waktu, dan jalur file, ID pengguna dan ID grup, tautan file , dan alamat fisik konten file.







Kita dapat mengatakan bahwa inode berisi semua data yang diperlukan untuk panggilan sistem stat() dan itu adalah nomor indeks untuk file yang disimpan dalam tabel inode. Setiap kali Anda membuat file, nomor inode untuk file itu dibuat. Menggunakan panggilan sistem stat, tabel sistem dapat dilihat.



Sintaks panggilan sistem C Stat:

Untuk menggunakan panggilan sistem stat dalam bahasa pemrograman C, Anda harus menyertakan file header berikut:



#termasuk

Stat digunakan untuk mengetahui status suatu file. Sintaks panggilan sistem C stat mungkin tidak sama untuk setiap sistem operasi. Di Linux sintaks untuk panggilan sistem stat adalah sebagai berikut:





ke dalamnegara(konstan arang *jalur, strukturnegara*buf)

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

Di Sini const char *jalur menentukan nama file. Jika jalur file adalah tautan simbolis maka Anda perlu menentukan tautan alih-alih nama file.



Kemudian pada fungsi tersebut kita memiliki struktur stat dimana data atau informasi tentang file tersebut disimpan yang menggunakan pointer bernama penggemar, yang diteruskan sebagai parameter dan diisi selama eksekusi panggilan dan dapat dibaca oleh pengguna setelah panggilan.

Struktur statistik:

Struktur stat yang didefinisikan dalam file header berisi bidang-bidang berikut:

strukturnegara
{
mode_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_size;
strukturtimspec st_atim;
strukturtimspec st_mtim;
strukturtimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Keterangan:

  1. st_dev: Ini adalah ID perangkat tempat kami menyimpan file kami saat ini.
  2. st_rdev: Bidang ini menjelaskan bahwa file tertentu mewakili perangkat tertentu.
  3. st_ino: Ini adalah nomor inode atau nomor seri file. Karena ini adalah nomor indeks sehingga harus unik untuk semua file
  4. ukuran_st: st_size adalah ukuran file dalam byte.
  5. st_atime: Ini adalah waktu terakhir atau terakhir kali file diakses.
  6. st_ctime: Ini adalah waktu terakhir di mana status atau izin file diubah.
  7. st_mtime: Ini adalah waktu terakhir saat file dimodifikasi.
  8. st_blkukuran: Bidang ini memberikan ukuran blok pilihan untuk sistem file I/O yang mungkin berbeda dari file ke file.
  9. st_blocks: Bidang ini memberi tahu jumlah total blok dalam kelipatan 512 byte.
  10. st_nlink: Bidang ini memberi tahu jumlah total tautan keras.
  11. st_uid: Bidang ini menunjukkan ID pengguna.
  12. st_gid: Bidang ini menunjukkan ID grup.
  13. st_mode: Ini menunjukkan izin pada file, memberi tahu mode pada file. Berikut ini adalah flag yang harus didefinisikan untuk bidang st_mode:
Bendera Keterangan Tandai Nilai
S_IFMT Bitmask yang digunakan untuk mendapatkan nilai mode dari suatu file 0170000
S_IFSOCK Konstanta file dari soket 0140000
S_IFLINK Konstanta file dari tautan simbolik 01200000
S_IFREG File konstan untuk file biasa 0100000
S_IFBLK File konstan untuk file blok 0060000
S_IFDIR File konstan untuk file direktori 0040000
S_IFCHR File konstan untuk file karakter 0020000
S_IFIFO Konstanta file fifo 0010000
S_ISUID Setel bit ID Pengguna 0004000
S_ISGID Setel bit ID Grup 0002000
S_ISVTX Bit lengket yang menunjukkan teks yang dibagikan 0001000
S_IRWXU Izin Pemilik (baca, tulis, jalankan) 00700
S_IRUSR Baca Izin untuk pemilik 00400
S_IWUSR Tulis Izin untuk pemilik 00200
S_IXUSR Jalankan Izin untuk pemilik 00100
S_IRWXG Izin Grup (baca, tulis, jalankan) 00070
S_IRGRP Baca Izin untuk grup 00040
S_IWGRP Tulis Izin untuk grup 00020
S_IXGRP Jalankan Izin untuk grup 00010
S_IRWXO Izin untuk orang lain (baca, tulis, jalankan) 00007
S_IROTH Baca Izin untuk orang lain 00004
S_IWOTH Tulis Izin untuk orang lain 00002
S_IXOTH Jalankan Izin untuk orang lain 00001

Cara menggunakan panggilan sistem Stat:

Contoh berikut menunjukkan cara menggunakan stat system call dalam bahasa pemrograman C di Linux, Ubuntu.

CONTOH 1:

Dalam kode berikut kita akan menemukan mode file:

KODE:

#termasuk
#termasuk
ke dalamutama()
{
//pointer ke stat struct
strukturfile negara;

//status panggilan sistem
negara('stat.c', &file);

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

Mengkompilasi dan menjalankan program kembali seperti di bawah ini:

Dalam kode ini, kami telah melewati nama file dalam panggilan sistem stat dan kemudian penunjuk ke stat struct yang merupakan sfile. Pointer ke stat struct kemudian digunakan untuk mengakses st_mode yang menampilkan mode file menggunakan pernyataan printf.

File header digunakan sehingga Anda dapat menggunakan panggilan sistem stat. File header adalah file library input/output standar sehingga Anda dapat menggunakan printf atau scanf dalam kode C Anda.

CONTOH 2:

Dalam kode berikut kita akan mendapatkan informasi tentang file menggunakan panggilan sistem stat:

KODE:

#termasuk
#termasuk
#termasuk
#termasuk

ruang kosongfile(arang konstannama file[]);

ke dalamutama(){
ssize_t baca;
arang*penyangga= 0;
ukuran_tbuf_size= 0;

printf ('Masukkan nama file untuk diperiksa: ');
Baca=getline(&penyangga, &buf_size,stdin);

jika (Baca<=0 ){
printf ('getline gagal ');
keluar (1);
}

jika (penyangga[Baca-1] == ' '){
penyangga[Baca-1] = 0;
}

ke dalamS=membuka(penyangga,O_RDONLY);
jika(S== -1){
printf ('File tidak ada ');
keluar (1);
}
lain{
file(penyangga);
}
Gratis (penyangga);
kembali 0;
}

ruang kosongfile(arang konstannama file[]){

strukturfile negara;

jika(negara(nama file, &file)== -1){
printf ('Terjadi Kesalahan ');
}

//Mengakses anggota data stat struct
printf (' File st_uid %d ',file.st_uid);
printf (' File st_blksize %ld ',file.st_blksize);
printf (' Berkas st_gid %d ',file.st_gid);
printf (' File st_blocks %ld ',file.st_blocks);
printf (' File st_size %ld ',file.st_size);
printf (' File st_nlink% u ',(tidak ditandatangani ke dalam)file.st_nlink);
printf (' Pengguna Izin File ');
printf ((file.st_mode &S_IRUSR)? 'R':'-');
printf ((file.st_mode &S_IWUSR)? 'di dalam':'-');
printf ((file.st_mode &S_IXUSR)? 'x':'-');
printf (' ');
printf (' Grup Izin File ');
printf ((file.st_mode &S_IRGRP)? 'R':'-');
printf ((file.st_mode &S_IWGRP)? 'di dalam':'-');
printf ((file.st_mode &S_IXGRP)? 'x':'-');
printf (' ');
printf (' Izin File Lainnya ');
printf ((file.st_mode &S_IROTH)? 'R':'-');
printf ((file.st_mode &S_IWOTH)? 'di dalam':'-');
printf ((file.st_mode &S_IXOTH)? 'x':'-');
printf (' ');
}

KELUARAN:

Pada kode C diatas kita telah memasukkan nama file dan jika file tersebut tidak ada maka eksekusi program akan dihentikan. Hal ini ditunjukkan pada gambar berikut:

Jika file kami ada, fungsi sfile(n) akan dipanggil di mana kami telah memberikan nama file. Di dalam fungsi, pertama-tama kita telah menggunakan panggilan sistem Stat, jika stat() mengembalikan -1 maka harus ada kesalahan sehingga pesan akan dicetak dan eksekusi program akan dihentikan.

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

Kemudian untuk mode file kita telah mengakses macro atau flag dari st_mode. Di sini logika dan operator digunakan untuk mencetak mode masing-masing. Kami telah memeriksa izin untuk pengguna, grup, dan lainnya untuk file yang ditentukan (nama file yang dimasukkan oleh pengguna).

Dengan ini Anda dapat melihat cara menggunakan panggilan sistem stat dari bahasa pemrograman C untuk mendapatkan informasi dari kernel OS tentang file. Jika Anda memiliki pertanyaan, silakan beri tahu kami melalui bagian komentar.