Rendszerhívások

Stat System Call Linux oktatóanyag

Stat System Call Linux oktatóanyag

Linux rendszerhívások

A linux kernel által nyújtott rendszerhívásokat a C programozási nyelv tárolja a glibc segítségével.  Rendszerhívás használatakor Ön kommunikál az operációs rendszerrel, és visszatéréskor az operációs rendszer kommunikál veled a rendszerhívás funkciókhoz visszatérő paramétereken keresztül (visszatérési értékek).

Stat System hívás:

A Stat rendszerhívás a Linux rendszerhívása egy fájl állapotának ellenőrzésére, például a fájl elérésének időpontjára vonatkozóan. A stat () rendszerhívás valójában a fájlattribútumokat adja vissza. Az inode fájlattribútumait alapvetően a Stat () függvény adja vissza. Az inode tartalmazza a fájl metaadatait. Az inode tartalmazza: a fájl típusát, a fájl méretét, amikor a fájlt elérte (módosította, törölte), azaz az időbélyegeket, valamint a fájl elérési útját, felhasználói azonosítóját és csoportazonosítóját, a fájl linkjeit és a fájl tartalmának fizikai címe.

Mondhatjuk, hogy az inode minden olyan adatot tartalmaz, amely a stat () rendszerhíváshoz szükséges, és ez az index száma a fájl számára, amelyet az inode tábla ment. Amikor létrehoz egy fájlt, létrehoz egy inode számot a fájlhoz. A stat rendszerhívás használatával a rendszer táblázatai megtekinthetők.

A C Stat rendszerhívás szintaxisa:

A stat rendszerhívás C programozási nyelven történő használatához a következő fejlécfájlt kell tartalmaznia:

#include

A Stat a fájl állapotának lekérésére szolgál. A C stat rendszerhívás szintaxisa nem minden operációs rendszer esetében lehet azonos. Linuxban a stat rendszerhívás szintaxisa a következő:

int stat (const char * elérési út, struct stat * buf)

A függvény visszatérési típusa int, ha a függvény sikeresen végrehajtásra kerül, akkor 0-t adunk vissza, ha bármilyen hiba van, -1-et adunk vissza.

Itt const char * útvonal megadja a fájl nevét. Ha a fájl elérési útja szimbolikus link, akkor a fájlnév helyett meg kell adnia a hivatkozást.

Ezután a függvényben van egy stat szerkezete amelyben a fájlra vonatkozó adatokat vagy információkat tárolják, amely egy megnevezett mutatót használ buf, amelyet paraméterként adnak át és a hívás végrehajtása során kitöltik, és a felhasználó a hívás után olvasható.

Stat szerkezet:

A stat struktúra, amelyet a fejlécfájl a következő mezőket tartalmazza:

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

Leírás:

  1. st_dev: Azon eszköz azonosítója, amelyben a fájlunk jelenleg tartózkodik.
  2. st_rdev: Ez a mező azt írja le, hogy egy adott fájl egy adott eszközt képvisel.
  3. st_ino: Ez a fájl inode vagy sorozatszáma. Mivel ez indexszám, ezért minden fájlnak egyedinek kell lennie
  4. st_size: Az st_size a fájl mérete bájtokban.
  5. st_atime: Ez a fájl legutóbbi vagy legutóbbi időpontja.
  6. st_ctime: A fájl állapotának vagy engedélyeinek megváltoztatásának legutóbbi időpontja.
  7. st_mtime: Ez az utóbbi időben történt a fájl módosítása.
  8. st_blksize: Ez a mező megadja az I / O fájlrendszer számára előnyben részesített blokkméretet, amely fájlról fájlra változhat.
  9. st_blocks: Ez a mező megmondja a blokkok teljes számát 512 bájt többszöröseként.
  10. st_nlink: Ez a mező megadja a hard linkek számát.
  11. st_uid: Ez a mező a felhasználói azonosítót jelöli.
  12. st_gid: Ez a mező a csoport azonosítóját jelöli.
  13. st_mode: Jelzi a fájl engedélyeit, megmondja a fájl módjait. Az alábbiakban megadjuk azokat a zászlókat, amelyeket meg kell adni az st_mode mező számára:
Zászlók Leírás Flag érték
S_IFMT A fájl módértékének lekérésére használt bitmaszk 0170000
S_IFSOCK A socket fájlállandója 0140000
S_IFLINK A szimbolikus link fájlállandója 0120000
S_IFREG Fájlállandó a szokásos fájlhoz 0100000
S_IFBLK Fájlállandó a blokkfájlhoz 0060000
S_IFDIR Fájlállandó a könyvtárfájlhoz 0040000
S_IFCHR Fájlállandó a karakterfájlhoz 0020000
S_IFIFO Fájlállandó: fifo 0010000
S_ISUID Állítsa be a User ID bitet 0004000
S_ISGID Állítsa be a Group ID bitet 0002000
S_ISVTX Ragadós bit, amely a megosztott szöveget jelzi 0001000
S_IRWXU Tulajdonos engedélyei (olvasás, írás, végrehajtás) 00700
S_IRUSR Olvassa el a tulajdonos engedélyeit 00400
S_IWUSR Írási engedélyek a tulajdonosnak 00200
S_IXUSR Engedélyek végrehajtása a tulajdonos számára 00100
S_IRWXG Csoportos engedélyek (olvasás, írás, végrehajtás) 00070
S_IRGRP Olvassa el a csoport engedélyeit 00040
S_IWGRP Írja meg a csoport engedélyeit 00020
S_IXGRP Végezze el a csoport engedélyeit 00010
S_IRWXO Engedélyek mások számára (olvasás, írás, végrehajtás) 00007
S_IROTH Olvassa el mások engedélyeit 00004
S_IWOTH Írási engedélyek másoknak 00002
S_IXOTH Engedélyek végrehajtása mások számára 00001

A Stat rendszerhívás használata:

Az alábbi példa bemutatja, hogyan kell használni a stat rendszerhívást C programozási nyelven Linux, Ubuntu rendszerben.

1. példa:

A következő kódban meg fogjuk találni a fájl módját:

KÓD:

#include
#include
int main ()

// mutató a stat struktúrára
struct stat sfile;
// stat rendszerhívás
stat ("stat.c ", & sfájl);
// st_mode elérése (a stat struct adattagja)
printf ("st_mode =% o", sfile.st_mode);
visszatér 0;

A program fordítása és futtatása az alábbiak szerint tér vissza:

Ebben a kódban átadtuk a fájl nevét a stat rendszerhívásban, majd az egérmutatót a stat struktúrába, amely sfile. Ezután a stat struct mutatóját az st_mode elérésére használják, amely a fájl módját jeleníti meg a printf utasítás segítségével.

A fejlécfájl használatos, így használhatja a stat rendszerhívást. A fejlécfájl a standard bemeneti / kimeneti könyvtárfájl, így a printf vagy scanf fájlokat használhatja a C kódban.

2. példa:

A következő kódban információkat kapunk a fájlról a stat rendszerhívás segítségével:

KÓD:

#include
#include
#include
#include
void sfile (char const fájlnév []);
int main ()
ssize_t olvasni;
char * puffer = 0;
méret_t buf_méret = 0;
printf ("Írja be az ellenőrzendő fájl nevét: \ n");
read = getline (& puffer, & buf_size, stdin);
ha (olvassa el <=0 )
printf ("nem sikerült a getline \ n");
kilépés (1);

if (puffer [read-1] == '\ n')
puffer [read-1] = 0;

int s = nyitott (puffer, O_RDONLY);
ha (s == - 1)
printf ("A fájl nem létezik \ n");
kilépés (1);

más
sfile (puffer);

szabad (puffer);
visszatér 0;

void sfile (char const fájlnév [])
struct stat sfile;
if (stat (fájlnév, & sfájl) == - 1)
printf ("Hiba történt \ n");

// A stat struct adat tagjainak elérése
printf ("\ nFájl st_uid% d \ n", sfile.st_uid);
printf ("\ nFájl st_blksize% ld \ n", sfile.st_blksize);
printf ("\ nFájl st_gid% d \ n", sfile.st_gid);
printf ("\ nFájl st_blocks% ld \ n", sfile.st_blocks);
printf ("\ nFájl st_size% ld \ n", sfile.st_size);
printf ("\ nFájl st_nlink% u \ n", (aláíratlan int) sfile.st_nlink);
printf ("\ nFájlengedélyek felhasználó \ 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 ("\ nFájljogosultsági csoport \ 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 ("\ nFájlengedélyek Egyéb \ n");
printf ((sfile.st_mode & S_IROTH)? "r": "-");
printf ((sfile.st_mode & S_IWOTH)? "w": "-");
printf ((sfile.st_mode & S_IXOTH)? "x":"-");
printf ("\ n");

KIMENET:

A fenti C kódba beírtuk a fájl nevét, és ha a fájl nem létezik, akkor a program végrehajtása leáll. Ezt mutatja a következő kép:

Ha létezik fájlunk, akkor az sfile (n) függvény meghívásra kerül, amelyben átadtuk a fájl nevét. A függvényben először is a Stat rendszerhívást használtuk, ha a stat () -1-et ad vissza, akkor e hibának kell lennie, így üzenetet nyomtat és a program végrehajtása leáll.

Ezután a printf utasításban a function és a dot elválasztó nevét használtuk az adatok tagjainak eléréséhez stat struktúra.

Ezután a fájl módjához hozzáférünk az st_mode makróihoz vagy zászlóihoz. Itt a logikai és az operátor segítségével nyomtatják ki a megfelelő módokat. Ellenőriztük a felhasználó, a csoport és mások engedélyeit a megadott fájlhoz (a felhasználó által megadott fájlnév).

Ezzel láthatja, hogyan használhatja a stat programhívást a C programozási nyelvből, hogy információkat szerezzen az OS kernelből a fájlokról.  Ha kérdése van, nyugodtan mondja el nekünk a megjegyzés részben.

Hogyan lehet megváltoztatni a bal és jobb egérgombokat a Windows 10 PC-n
Elég általános, hogy az összes számítógépes egéreszközt ergonómikusan a jobbkezes felhasználók számára tervezték. De vannak olyan egéreszközök, amelye...
Az egérkattintások emulálása az egérrel a Clickless Mouse használatával a Windows 10 rendszerben
Ha az egeret vagy a billentyűzetet nem megfelelő testtartásban, túlzott használat mellett használhatja, számos egészségügyi problémát okozhat, beleért...
Ezekkel az ingyenes eszközökkel adja hozzá az egérmozdulatokat a Windows 10 rendszerhez
Az elmúlt években a számítógépek és az operációs rendszerek nagymértékben fejlődtek. Volt idő, amikor a felhasználóknak parancsokkal kellett navigálni...