Systémové volania

Výukový program pre systémový hovor so systémom Stat

Výukový program pre systémový hovor so systémom Stat

Systémové volania systému Linux

Systémové volania poskytované linuxovým jadrom sú vystavené v programovacom jazyku C cez glibc.  Keď sa použije systémové volanie, komunikujete s OS a po návrate vás OS komunikuje prostredníctvom parametrov, ktoré sa vrátia do funkcií systémového volania (návratové hodnoty).

Systémové volanie Stat:

Systémové volanie Stat je systémové volanie v systéme Linux na kontrolu stavu súboru, napríklad na kontrolu prístupu k súboru. Systémové volanie stat () v skutočnosti vracia atribúty súborov. Atribúty súboru inode sú v podstate vrátené funkciou Stat (). Inode obsahuje metaúdaje súboru. Inode obsahuje: typ súboru, veľkosť súboru, kedy bol súbor sprístupnený (upravený, vymazaný), čo je časová pečiatka, a cesta k súboru, ID užívateľa a ID skupiny, odkazy na súbor a fyzická adresa obsahu súboru.

Môžeme povedať, že inode obsahuje všetky údaje, ktoré sú potrebné pre systémové volanie stat (), a je to indexové číslo súboru, ktorý je uložený v tabuľke inode. Kedykoľvek vytvoríte súbor, vytvorí sa číslo inódu pre tento súbor. Pomocou systémového volania stat je možné prezerať systémové tabuľky.

Syntax systémového volania C Stat:

Ak chcete použiť systémové volanie stat v programovacom jazyku C, musíte zahrnúť nasledujúci súbor hlavičky:

#include

Stat sa používa na získanie stavu súboru. Syntax systémového volania C stat nemusí byť pre každý operačný systém rovnaká. V systéme Linux je syntax pre volanie systému stat nasledovná:

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

Návratový typ funkcie v int, ak je funkcia úspešne vykonaná, vráti sa 0, ak sa vyskytnú nejaké chyby, vráti sa -1.

Tu const char * cesta určuje názov súboru. Ak je cesta k súboru symbolickým odkazom, musíte namiesto názvu súboru určiť odkaz.

Potom vo funkcii máme a štruktúra statu v ktorom sú uložené údaje alebo informácie o súbore, ktorý používa ukazovateľ s názvom buf, ktorý sa odovzdáva ako parameter a vyplňuje sa počas vykonávania hovoru a je čitateľný používateľom po ukončení hovoru.

Štruktúra statu:

Štruktúra statu, ktorá je definovaná v hlavičkový súbor obsahuje nasledujúce polia:

Štruktúra stat

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;
;

Popis:

  1. st_dev: Je to ID zariadenia, v ktorom je momentálne náš súbor uložený.
  2. st_rdev: Toto pole popisuje, že konkrétny súbor predstavuje konkrétne zariadenie.
  3. st_ino: Je to číslo inodu alebo sériové číslo súboru. Pretože ide o indexové číslo, malo by byť jedinečné pre všetky súbory
  4. st_size: st_size je veľkosť súboru v bajtoch.
  5. st_atime: Je to posledný alebo posledný čas, kedy bol súbor sprístupnený.
  6. st_ctime: Je to nedávny čas, keď bol zmenený stav alebo povolenia súboru.
  7. st_mtime: Je to nedávny čas, keď bol súbor upravený.
  8. st_blksize: Toto pole udáva preferovanú veľkosť bloku pre systém súborov I / O, ktorá sa môže v jednotlivých súboroch líšiť.
  9. st_blocks: Toto pole udáva celkový počet blokov v násobkoch 512 bajtov.
  10. st_nlink: Toto pole udáva celkový počet pevných odkazov.
  11. st_uid: Toto pole označuje ID používateľa.
  12. st_gid: Toto pole označuje ID skupiny.
  13. st_mode: Označuje oprávnenie k súboru, udáva režimy v súbore. Nasledujú príznaky, ktoré by mali byť definované pre pole st_mode:
Vlajky Popis Hodnota príznaku
S_IFMT Bitová maska ​​používaná na získanie hodnoty režimu súboru 0170000
S_IFSOCK Súborová konštanta soketu 0140000
S_IFLINK Súborová konštanta symbolického odkazu 0120000
S_IFREG Konštanta súboru pre bežný súbor 0100000
S_IFBLK Konštanta súboru pre blokovaný súbor 0060000
S_IFDIR Konštanta súboru pre adresárový súbor 0040000
S_IFCHR Konštanta súboru pre znakový súbor 0020000
S_IFIFO Konštantná konštanta súboru fifo 0010000
S_ISUID Nastaviť bit User ID 0004000
S_ISGID Nastaviť bit ID skupiny 0002000
S_ISVTX Lepivý bit, ktorý označuje zdieľaný text 0001000
S_IRWXU Povolenia vlastníka (čítanie, zápis, vykonávanie) 00700
S_IRUSR Prečítajte si povolenia pre vlastníka 00400
S_IWUSR Napíšte oprávnenie pre vlastníka 00200
S_IXUSR Vykonať povolenia pre vlastníka 00100
S_IRWXG Skupinové povolenia (čítanie, zápis, vykonávanie) 00070
S_IRGRP Prečítajte si povolenia pre skupinu 00040
S_IWGRP Oprávnenie na zápis pre skupinu 00020
S_IXGRP Vykonajte oprávnenie pre skupinu 00010
S_IRWXO Povolenia pre ostatných (čítanie, zápis, vykonávanie) 00007
S_IROTH Prečítajte si povolenia pre ostatných 00004
S_IWOTH Písať povolenia pre ostatných 00002
S_IXOTH Vykonávať povolenia pre ostatných 00001

Ako používať systémové volanie Stat:

Nasledujúci príklad ukazuje, ako používať systémové volanie stat v programovacom jazyku C v systéme Linux, Ubuntu.

PRÍKLAD 1:

V nasledujúcom kóde nájdeme režim súboru:

KÓD:

#include
#include
int main ()

// ukazovateľ na štruktúru stat
struct stat sfile;
// statne systemove volanie
stat („stat.c ", & sfile);
// prístup k st_mode (dátový člen štatistickej štruktúry)
printf ("st_mode =% o", sfile.st_mode);
návrat 0;

Zostavenie a spustenie programu sa vráti takto:

V tomto kóde sme odovzdali názov súboru volanie systému stat a potom ukazovateľ na stat struct, ktorý je sfile. Ukazovateľ na štruktúru stat sa potom použije na prístup k st_mode, ktorý zobrazí režim súboru pomocou príkazu printf.

Hlavičkový súbor sa používa, aby ste mohli použiť systémové systémové volanie. Hlavičkový súbor je štandardný súbor knižnice vstupov / výstupov, aby ste mohli v kóde C použiť printf alebo scanf.

PRÍKLAD 2:

V nasledujúcom kóde dostaneme informácie o súbore pomocou systémového volania stat:

KÓD:

#include
#include
#include
#include
void sfile (char const nazov suboru []);
int main ()
ssize_t prečítané;
char * buffer = 0;
size_t buf_size = 0;
printf ("Zadajte názov súboru na kontrolu: \ n");
read = getline (& buffer, & buf_size, stdin);
ak (prečítať <=0 )
printf ("getline zlyhalo \ n");
výstup (1);

if (buffer [read-1] == '\ n')
vyrovnávacia pamäť [čítanie-1] = 0;

int s = otvorené (vyrovnávacia pamäť, O_RDONLY);
if (s == - 1)
printf ("Súbor neexistuje \ n");
výstup (1);

else
sfile (vyrovnávacia pamäť);

voľný (nárazník);
návrat 0;

void sfile (char const názov súboru [])
struct stat sfile;
if (stat (nazov souboru, & sfile) == - 1)
printf ("Vyskytla sa chyba \ n");

// Prístup k dátovým členom štatistickej štruktúry
printf ("\ nSúbor st_uid% d \ n", sfile.st_uid);
printf ("\ nSúbor st_blksize% ld \ n", sfile.st_blksize);
printf ("\ nSúbor st_gid% d \ n", sfile.st_gid);
printf ("\ nSúbor st_blocks% ld \ n", sfile.st_blocks);
printf ("\ nSúbor st_size% ld \ n", sfile.st_size);
printf ("\ nSúbor st_nlink% u \ n", (nepodpísaný int) sfile.st_nlink);
printf ("\ nUživateľské oprávnenie súboru \ 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 ("\ nSkupina povolení súborov \ 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 ("\ nSúborové povolenia iné \ n");
printf ((sfile.st_mode & S_IROTH)? "r": "-");
printf ((sfile.st_mode & S_IWOTH)? "w": "-");
printf ((sfile.st_mode & S_IXOTH)? "X":"-");
printf ("\ n");

VÝKON:

Vo vyššie uvedenom C kóde sme zadali názov súboru a ak súbor neexistuje, vykonávanie programu sa zastaví. Toto je demonštrované na nasledujúcom obrázku:

Pokiaľ náš súbor existuje, zavolá sa funkcia sfile (n), v ktorej sme zadali názov súboru. Vo vnútri funkcie sme v prvom rade použili systémové volanie Stat, ak stat () vráti -1, potom musí byť e akákoľvek chyba, takže sa vytlačí správa a zastaví sa vykonávanie programu.

Potom sme v príkaze printf použili názov funkcie a oddeľovač bodiek na prístup k dátovým členom stat štruktúr.

Potom sme pre režim súboru sprístupnili makra alebo príznaky st_mode. Tu sa používa logický operátor a operátor na tlač príslušných režimov. Skontrolovali sme povolenia pre používateľa, skupinu a ďalšie pre zadaný súbor (názov súboru zadaný používateľom).

S týmto môžete vidieť, ako používať systémové volanie stat z programovacieho jazyka C na získanie informácií z jadra OS o súboroch.  Ak máte otázku, neváhajte a povedzte nám to v sekcii komentárov.

Hry Najlepšie linuxové distribúcie pre hry v roku 2021
Najlepšie linuxové distribúcie pre hry v roku 2021
Operačný systém Linux prešiel dlhou cestou od svojho originálneho, jednoduchého serverového vzhľadu. Tento OS sa za posledné roky nesmierne vylepšil a...
Hry Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
V minulosti sa hranie hier považovalo iba za hobby, ale časom došlo v hernom priemysle k obrovskému nárastu z hľadiska technológie i počtu hráčov. Her...
Hry Najlepšie hry na hranie s ručným sledovaním
Najlepšie hry na hranie s ručným sledovaním
Oculus Quest nedávno predstavil skvelú myšlienku ručného sledovania bez ovládačov. Vďaka stále sa zvyšujúcemu počtu hier a aktivít, ktoré vykonávajú p...