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:
- st_dev: Ini adalah ID perangkat tempat kami menyimpan file kami saat ini.
- st_rdev: Bidang ini menjelaskan bahwa file tertentu mewakili perangkat tertentu.
- st_ino: Ini adalah nomor inode atau nomor seri file. Karena ini adalah nomor indeks sehingga harus unik untuk semua file
- ukuran_st: st_size adalah ukuran file dalam byte.
- st_atime: Ini adalah waktu terakhir atau terakhir kali file diakses.
- st_ctime: Ini adalah waktu terakhir di mana status atau izin file diubah.
- st_mtime: Ini adalah waktu terakhir saat file dimodifikasi.
- st_blkukuran: Bidang ini memberikan ukuran blok pilihan untuk sistem file I/O yang mungkin berbeda dari file ke file.
- st_blocks: Bidang ini memberi tahu jumlah total blok dalam kelipatan 512 byte.
- st_nlink: Bidang ini memberi tahu jumlah total tautan keras.
- st_uid: Bidang ini menunjukkan ID pengguna.
- st_gid: Bidang ini menunjukkan ID grup.
- 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.