Panggilan Sistem

Tutorial Linux Sistem Panggilan Stat

Tutorial Linux Sistem Panggilan Stat

Panggilan Sistem Linux

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 dapat 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 stat C mungkin tidak sama untuk setiap sistem operasi. Di Linux sintaks untuk panggilan sistem stat adalah seperti berikut:

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

Jenis kembali fungsi dalam int, jika fungsi berjaya dijalankan, 0 dikembalikan jika ada kesalahan, -1 akan dikembalikan.

Di sini const char * jalan menentukan nama fail. Sekiranya jalur fail adalah pautan simbolik, maka anda perlu menentukan pautan dan bukan 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 ditakrifkan dalam fail tajuk mengandungi bidang berikut:

stat stat

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;
struct timspec st_atim;
struct timspec st_mtim;
struct timspec 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 pilihan 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 mod 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
int utama ()

// penunjuk ke stat struct
struktur stat sfile;
// panggilan sistem stat
stat ("stat.c ", & sfile);
// mengakses st_mode (data anggota stat stat)
printf ("st_mode =% o", sfile.st_mode);
pulangan 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 stat yang sfile. Pointer ke stat struct kemudian digunakan untuk mengakses st_mode yang memaparkan mod fail menggunakan pernyataan printf.

Fail pengepala digunakan supaya anda dapat menggunakan panggilan sistem stat. Fail pengepala 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
batal sfile (nama fail char const []);
int utama ()
ssize_t membaca;
char * buffer = 0;
size_t buf_size = 0;
printf ("Masukkan nama fail untuk diperiksa: \ n");
read = getline (& penyangga, & buf_size, stdin);
sekiranya (baca <=0 )
printf ("getline gagal \ n");
jalan keluar (1);

jika (penyangga [read-1] == '\ n')
penampan [baca-1] = 0;

int s = terbuka (penyangga, O_RDONLY);
jika (s == - 1)
printf ("Fail tidak wujud \ n");
jalan keluar (1);

lain
sfile (penyangga);

percuma (penyangga);
pulangan 0;

batal sfile (nama fail char const [])
struktur stat sfile;
if (stat (nama fail, & sfile) == - 1)
printf ("Ralat Berlaku \ n");

// Mengakses data anggota stat stat
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_size);
printf ("\ nFile st_nlink% u \ n", (int tidak ditandatangani) sfile.st_nlink);
printf ("\ nFile Permissions Pengguna \ n");
printf ((sfile.st_mode & S_IRUSR)? "r": "-");
printf ((sfile.st_mode & S_IWUSR)? "w": "-");
printf ((sfile.st_mode & S_IXUSR)? "x": "-");
printf ("\ n");
printf ("\ nFile Permissions Group \ n");
printf ((sfile.st_mode & S_IRGRP)? "r": "-");
printf ((sfile.st_mode & S_IWGRP)? "w": "-");
printf ((sfile.st_mode & S_IXGRP)? "x": "-");
printf ("\ n");
printf ("\ nFile Kebenaran Lain \ n");
printf ((sfile.st_mode & S_IROTH)? "r": "-");
printf ((sfile.st_mode & S_IWOTH)? "w": "-");
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 () kembali -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.

Kajian Tetikus Tanpa Wayar Microsoft Sculpt Touch
Saya baru-baru ini membaca mengenai Sentuhan Microsoft Sculpt tetikus tanpa wayar dan memutuskan untuk membelinya. Setelah menggunakannya sebentar, sa...
Trackpad dan Mouse Pointer pada skrin Windows AppyMouse untuk Tablet Windows
Pengguna tablet sering kehilangan penunjuk tetikus, terutama ketika mereka biasa menggunakan komputer riba. Telefon pintar dan tablet skrin sentuh dil...
Butang tetikus tengah tidak berfungsi pada Windows 10
The butang tetikus tengah membantu anda menelusuri halaman web dan skrin yang panjang dengan banyak data. Sekiranya ia berhenti, anda akan menggunakan...