Panggilan Sistem

Tutorial Panggilan Sistem Stat Linux

Tutorial Panggilan Sistem Stat Linux

Panggilan Sistem Linux

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:

Panggilan sistem stat adalah panggilan sistem di Linux untuk memeriksa status file seperti untuk memeriksa kapan file itu 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 mendapatkan status file. Sintaks panggilan sistem C stat mungkin tidak sama untuk setiap sistem operasi. Di Linux sintaks untuk panggilan sistem stat adalah sebagai berikut:

int stat(const char *path, struct stat *buf)

Jenis kembalinya fungsi dalam ke dalam, jika fungsi berhasil dijalankan, 0 dikembalikan jika ada kesalahan, -1 akan dikembalikan.

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

Kemudian dalam fungsi kita memiliki struktur stat di mana data atau informasi tentang file disimpan yang menggunakan pointer bernama buf, 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:

status struktur

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_t          st_size;
struct timspec st_atim;
struct timspec st_mtim;
struct timspec st_ctim;
blksize_t      st_blksize;
blkcnt_t       st_blocks;
;

Deskripsi:

  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 di mana file itu dimodifikasi.
  8. st_blksize: 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 Deskripsi Tandai Nilai
S_IFMT Bitmask yang digunakan untuk mendapatkan nilai mode dari sebuah 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 panggilan sistem stat dalam bahasa pemrograman C di Linux, Ubuntu.

CONTOH 1:

Dalam kode berikut kita akan menemukan mode file:

KODE:

#termasuk
#termasuk
int utama()

//pointer ke stat struct
struct stat file;
//status panggilan sistem
stat("stat.c", &sfile);
//mengakses st_mode (anggota data stat struct)
printf("st_mode = %o", sfile.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 headernya digunakan sehingga Anda dapat menggunakan panggilan sistem stat. File headernya adalah file perpustakaan 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
void sfile(nama file char const[]);
int utama()
ssize_t baca;
char* penyangga = 0;
size_t buf_size = 0;
printf("Masukkan nama file yang akan diperiksa: \n");
baca = getline(&buffer, &buf_size, stdin);
jika (baca <=0 )
printf("getline gagal\n");
keluar(1);

if (penyangga[baca-1] == '\n')
buffer[baca-1] = 0;

int s=buka(penyangga,O_RDONLY);
jika(s==-1)
printf("File tidak ada\n");
keluar(1);

lain
sfile(penyangga);

gratis (penyangga);
kembali 0;

void sfile(char const nama file[])
struct stat file;
if(stat(nama file,&sfile)==-1)
printf("Terjadi Kesalahan\n");

//Mengakses anggota data stat struct
printf("\nFile st_uid %d \n",sfile.st_uid);
printf("\nFile st_blksize %ld \n",sfile.st_blksize);
printf("\nFile st_gid %d \n",sfile.st_gid);
printf("\nFile st_blocks %ld \n",sfile.st_blocks);
printf("\nFile st_size %ld \n",sfile.st_ukuran);
printf("\nFile st_nlink %u \n",(unsigned int)sfile.st_nlink);
printf("\nPengguna Izin File\n");
printf((file.st_mode & S_IRUSR)? "r":"-");
printf((file.st_mode & S_IWUSR)? "w":"-");
printf((file.st_mode & S_IXUSR)? "x":"-");
printf("\n");
printf("\nGrup Izin File\n");
printf((file.st_mode & S_IRGRP)? "r":"-");
printf((file.st_mode & S_IWGRP)? "w":"-");
printf((file.st_mode & S_IXGRP)? "x":"-");
printf("\n");
printf("\nIzin File Lainnya\n");
printf((file.st_mode & S_IROTH)? "r":"-");
printf((file.st_mode & S_IWOTH)? "w":"-");
printf((file.st_mode & S_IXOTH)? "x":"-");
printf("\n");

KELUARAN:

Pada kode C diatas kita sudah 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 kami telah mengakses makro atau flag 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.

Shadow of the Tomb Raider untuk Tutorial Linux
Shadow of the Tomb Raider adalah tambahan kedua belas untuk seri Tomb Raider - waralaba game aksi-petualangan yang dibuat oleh Eidos Montreal. Permain...
Cara Meningkatkan FPS di Linux?
FPS adalah singkatan dari Bingkai per detik. Tugas FPS adalah mengukur kecepatan bingkai dalam pemutaran video atau pertunjukan game. Dengan kata sede...
Game Lab Aplikasi Oculus Teratas
Jika Anda adalah pemilik headset Oculus maka Anda harus tahu tentang sideloading. Sideloading adalah proses menginstal konten non-toko di headset Anda...