Stat System Call Linux bemutató

Stat System Call Linux Tutorial



A linux kernel által biztosított rendszerhívások a C programozási nyelven jelennek meg a glibc segítségével. Rendszerhívás használatakor kommunikál az operációs rendszerrel, és visszatérve az operációs rendszer a rendszerhívási funkciókhoz visszaadott paramétereken keresztül (visszatérési értékek) kommunikál Önnel.

Stat rendszerhívás:

A stat rendszerhívás egy rendszerhívás a Linuxban, hogy ellenőrizze a fájl állapotát, például annak ellenőrzését, hogy a fájl mikor volt elérhető. A stat () rendszerhívás valójában fájl attribútumokat ad vissza. Az inode fájl attribú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ájlhoz hozzáfértek (módosították, törölték), azaz időbélyegeket, valamint a fájl elérési útját, a felhasználói azonosítót és a csoportazonosítót, a fájl hivatkozásait és a fájltartalom fizikai címe.







Azt mondhatjuk, hogy az inode tartalmazza a stat () rendszerhíváshoz szükséges összes adatot, és ez a fájl indexszáma, amelyet az inode táblázat tárol. Amikor létrehoz egy fájlt, egy inode szám jön létre a fájlhoz. A stat system call használatával a rendszer táblái 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:



#befoglalni

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 rendszerben lehet azonos. Linux alatt a stat rendszerhívás szintaxisa a következő:





intállapot(const char *pálya, strukállapot*buf)

A függvény visszatérési típusa az int -ben, ha a függvényt sikeresen végrehajtottuk, 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 hivatkozás, akkor a hivatkozást kell megadnia a fájlnév helyett.



Ezután a függvényben van egy statisztika, amelyben a fájlra vonatkozó adatok vagy információk tárolódnak, és egy elnevezett mutatót használnak buf, amelyet paraméterként adnak át, és a hívás végrehajtása során töltenek ki, és a felhasználó a hívás után olvasható.

Statisztika szerkezete:

A fejlécfájlban meghatározott stat struktúra a következő mezőket tartalmazza:

strukállapot
{
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;
struktimspec st_atim;
struktimspec st_mtim;
struktimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Leírás:

  1. st_dev: Ez az eszköz azon azonosítója, amelyben a fájlunk jelenleg található.
  2. st_rdev: Ez a mező leírja, hogy egy adott fájl egy adott eszközt képvisel.
  3. st_ino: Ez a fájl bemeneti száma vagy sorozatszáma. Mivel ez egy indexszám, ezért minden fájlnak egyedinek kell lennie
  4. st_size: Az st_size a fájl mérete bájtban.
  5. st_atime: Ez az utolsó vagy legutóbbi időpont, amikor a fájlhoz hozzáfértek.
  6. st_ctime: Ez a legutóbbi időpont, amikor a fájl állapota vagy engedélyei megváltoztak.
  7. st_mtime: Ez a legutóbbi időpont, amikor a fájlt módosították.
  8. st_blksize: Ez a mező megadja az I/O fájlrendszer preferált blokkméretét, amely fájlonként eltérő lehet.
  9. st_blocks: Ez a mező a blokkok teljes számát adja meg 512 bájt többszörösében.
  10. st_nlink: Ez a mező a merev hivatkozások teljes számát mutatja.
  11. st_uid: Ez a mező jelzi a felhasználói azonosítót.
  12. st_gid: Ez a mező jelzi a csoport azonosítóját.
  13. st_mode: Ez jelzi a fájl engedélyeit, megmondja a fájl módját. A következő zászlókat kell megadni az st_mode mezőhöz:
Zászlók Leírás Zászló értéke
S_IFMT A fájl módértékének lekérésére használt bitmaszk 0170000
S_IFSOCK Fájlállandó socket 0140000
S_IFLINK Szimbolikus link fájl konstans 0120000
S_IFREG Fájlállandó a normál 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ó karakterfájl esetén 0020000
S_IFIFO Fájlállandó 0010000
S_ISUID Állítsa be a User ID bitet 0004000
S_ISGID Állítsa be a csoportazonosító bitet 0002000
S_ISVTX Ragadós bit, amely a megosztott szöveget jelzi 0001000
S_IRWXU Tulajdonos jogosultságok (olvasás, írás, végrehajtás) 00700
S_IRUSR Olvassa el a jogosultságokat a tulajdonos számára 00400
S_IWUSR Írjon jogosultságokat a tulajdonos számára 00200
S_IXUSR Végezze el a jogosultságokat 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 jogosultságait 00040
S_IWGRP Írja be a csoport jogosultságait 00020
S_IXGRP Végezze el a csoport jogosultságait 00010
S_IRWXO Engedélyek mások számára (olvasás, írás, végrehajtás) 00007
S_IROTH Olvassa el az engedélyeket mások számára 00004
S_IWOTH Írjon engedélyeket másoknak 00002
S_IXOTH Végezzen engedélyeket másoknak 00001

A Stat rendszerhívás használata:

A következő példa bemutatja, hogyan kell használni a stat rendszerhívást C programozási nyelven Linux, Ubuntu esetén.

1. példa:

A következő kódban megtaláljuk a fájl módját:

KÓD:

#befoglalni
#befoglalni
intfő-()
{
// mutató a stat szerkezetre
strukállapot sfile;

// stat rendszerhívás
állapot('stat.c', &sfile);

// st_mode elérése (a stat structure adattagja)
printf ('st_mode = %o',sfile.st_mode);
Visszatérés 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 a mutatót a stat struktúra felé, amely az sfile. A stat szerkezetre mutató mutató ezután az st_mode elérésére szolgál, amely a fájl módját a printf utasítás használatával jeleníti meg.

A fejlécfájlt használjuk, így használhatja a stat rendszerhívást. A fejlécfájl a szabványos bemeneti/kimeneti könyvtári fájl, így a printf vagy scanf fájlokat a C kódban használhatja.

2. példa:

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

KÓD:

#befoglalni
#befoglalni
#befoglalni
#befoglalni

üressfile(char constfájl név[]);

intfő-(){
ssize_t olvasni;
char*puffer= 0;
size_tbuf_size= 0;

printf ('Írja be az ellenőrizni kívánt fájl nevét: n');
olvas=getline(&puffer, &buf_size,stdin);

ha (olvas<=0 ){
printf ('a getline nem sikerült n');
kijárat (1);
}

ha (puffer[olvas-1] == ' n'){
puffer[olvas-1] = 0;
}

ints=nyisd ki(puffer,O_RDONLY);
ha(s== -1){
printf ('A fájl nem létezik n');
kijárat (1);
}
más{
sfile(puffer);
}
ingyenes (puffer);
Visszatérés 0;
}

üressfile(char constfájl név[]){

strukállapot sfile;

ha(állapot(fájl név, &sfile)== -1){
printf ('Hiba történt n');
}

// A statructure adattagjainak elérése
printf (' nSt_uid %d fájl n',sfile.st_uid);
printf (' nSt_blksize %ld fájl n',sfile.st_blksize);
printf (' nSt_gid fájl %d n',sfile.st_gid);
printf (' nSt_blocks %ld fájl n',sfile.st_blocks);
printf (' nSt_size %ld fájl n',sfile.st_size);
printf (' nSt_nlink% u fájl n',(aláírás nélküli int)sfile.st_nlink);
printf (' nFájljogosultságok felhasználó n');
printf ((sfile.st_mode &S_IRUSR)? 'r':'-');
printf ((sfile.st_mode &S_IWUSR)? 'ban ben':'-');
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)? 'ban ben':'-');
printf ((sfile.st_mode &S_IXGRP)? 'x':'-');
printf (' n');
printf (' nFájljogosultságok Egyéb n');
printf ((sfile.st_mode &S_IROTH)? 'r':'-');
printf ((sfile.st_mode &S_IWOTH)? 'ban ben':'-');
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 bizonyítja az alábbi kép:

Ha létezik fájlunk, akkor az sfile (n) függvényt hívjuk meg, amelyben átadtuk a fájl nevét. A függvényen belül először a Stat rendszerhívást használtuk, ha a stat () -1 értéket ad vissza, akkor minden hibának meg kell jelennie, így az üzenet kinyomtatásra kerül, és a program végrehajtása leáll.

Ezután a printf utasításban a függvény és a pontelválasztó nevét használtuk az adatok tagjainak eléréséhez stat structure .

Ezután a fájlmódhoz hozzáértünk az st_mode makróihoz vagy zászlóihoz. Itt a logikai és az operátor a megfelelő módok nyomtatására szolgál. Ellenőriztük a felhasználó, csoport és mások engedélyeit a megadott fájlhoz (a felhasználó által megadott fájlnév).

Ezzel láthatja, hogyan kell használni a C programozási nyelvből származó stat rendszerhívást, hogy információkat szerezzen az operációs rendszer kerneljéről a fájlokról. Ha kérdése van, bátran jelezze nekünk a megjegyzés rovatban.