Stat System Call Linuxi õpetus

Stat System Call Linux Tutorial



Linuxi kerneli pakutavad süsteemikõned paljastatakse C -programmeerimiskeeles glibc kaudu. Kui kasutate süsteemikõnet, suhtlete operatsioonisüsteemiga ja tagastamisel suhtleb operatsioonisüsteem teile parameetrite kaudu, mis tagastatakse süsteemikõne funktsioonidele (tagastamisväärtused).

Süsteemi süsteemi kõne:

Stat süsteemikõne on süsteemikõne Linuxis, et kontrollida faili olekut, näiteks kontrollida, millal failile juurde pääseti. Süsteemikõne stat () tagastab tegelikult faili atribuudid. Inode faili atribuudid tagastab põhiliselt funktsioon Stat (). Inode sisaldab faili metaandmeid. Inode sisaldab: faili tüüpi, faili suurust, kui failile juurde pääseti (muudeti, kustutati), mis on ajatemplid, ja faili teed, kasutajatunnust ja rühma ID -d, faili linke ja faili sisu füüsiline aadress.







Võime öelda, et inode sisaldab kõiki andmeid, mida on vaja süsteemikõne jaoks () ja see on faili indeksinumber, mis salvestatakse inode tabelisse. Kui loote faili, luuakse sellele failile inode number. Süsteemi süsteemikõne abil saab vaadata süsteemitabeleid.



C Stat süsteemi kõne süntaks:

Stat -süsteemi kõne kasutamiseks C -programmeerimiskeeles peate lisama järgmise päisefaili:



#kaasake

Statit kasutatakse faili oleku saamiseks. Süsteemi C stat süntaks ei pruugi olla iga opsüsteemi puhul sama. Linuxis on stat -süsteemi kõne süntaks järgmine:





intosariik(const süsi *tee, struktuuriosariik*buf)

Funktsiooni tagastustüüp int -s, kui funktsioon on edukalt täidetud, tagastatakse tõrgete korral 0, tagastatakse -1.

Siin const char *tee määrab faili nime. Kui faili tee on sümboolne link, peate faili nime asemel määrama lingi.



Siis on meil funktsioonis statistiline struktuur, milles salvestatakse faili andmed või teave, mis kasutab kursorit nimega buf, mis antakse parameetrina sisse ja täidetakse kõne täitmise ajal ning kasutaja saab pärast kõnet lugeda.

Struktuuri struktuur:

Päisefailis määratletud statistiline struktuur sisaldab järgmisi välju:

struktuuriosariik
{
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;
struktuuritimspec st_atim;
struktuuritimspec st_mtim;
struktuuritimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Kirjeldus:

  1. st_dev: See on selle seadme ID, milles meie fail praegu asub.
  2. st_rdev: See väli kirjeldab, et konkreetne fail tähistab konkreetset seadet.
  3. st_ino: See on faili sisestusnumber või seerianumber. Kuna see on registrinumber, peaks see olema kõigi failide jaoks unikaalne
  4. st_size: st_size on faili suurus baitides.
  5. st_atime: See on viimane või viimane aeg, mil failile juurde pääseti.
  6. st_ctime: See on hiljutine aeg, mil faili olekut või õigusi muudeti.
  7. st_mtime: See on hiljutine aeg, mil faili muudeti.
  8. st_blksize: See väli annab I/O -failisüsteemi jaoks eelistatud plokisuuruse, mis võib failiti erineda.
  9. st_blocks: See väli näitab plokkide koguarvu 512 baidi kordajana.
  10. st_nlink: See väli näitab kõvade linkide koguarvu.
  11. st_uid: See väli näitab kasutajatunnust.
  12. st_gid: See väli näitab rühma ID -d.
  13. st_mode: See näitab faili õigusi, ütleb faili režiimid. Järgmised on lipud, mis tuleks väljale st_mode määratleda:
Lipud Kirjeldus Lipu väärtus
S_IFMT Failirežiimi väärtuse saamiseks kasutatav bitimask 0170000
S_IFSOCK Pistikupesa failikonstant 0140000
S_IFLINK Sümboolse lingi failikonstant 0120000
S_IFREG Failikonstant tavalise faili jaoks 0100000
S_IFBLK Failikonstant plokkfaili jaoks 0060000
S_IFDIR Failikonstant kataloogifaili jaoks 0040000
S_IFCHR Failikonstant märgi faili jaoks 0020000
S_IFIFO Failikonstant fifo 0010000
S_ISUID Määrake kasutaja ID -bit 0004000
S_ISGID Määrake rühma ID bit 0002000
S_ISVTX Kleepuv bit, mis näitab jagatud teksti 0001000
S_IRWXU Omaniku õigused (lugemine, kirjutamine, täitmine) 00700
S_IRUSR Lugege omaniku õigusi 00400
S_IWUSR Kirjutage omanikule õigused 00200
S_IXUSR Täitke omanikule load 00100
S_IRWXG Rühmaõigused (lugemine, kirjutamine, täitmine) 00070
S_IRGRP Lugege grupi õigusi 00040
S_IWGRP Kirjutage grupile load 00020
S_IXGRP Täida grupi õigused 00010
S_IRWXO Teiste õigused (lugemine, kirjutamine, täitmine) 00007
S_IROTH Lugege õigusi teistele 00004
S_IWOTH Kirjutage õigused teistele 00002
S_IXOTH Täitke õigusi teistele 00001

Kuidas kasutada Stat -süsteemi kõnet:

Järgmine näide näitab, kuidas kasutada süsteemi süsteemikõnet C -programmeerimiskeeles Linuxis, Ubuntus.

NÄIDE 1:

Järgmises koodis leiame faili režiimi:

KOOD:

#kaasake
#kaasake
intpeamine()
{
// osutaja statistilisele struktuurile
struktuuriolekufail;

// stat süsteemi kõne
osariik('stat.c', &sfile);

// juurdepääs st_mode'ile (statistilise struktuuri andme liige)
printf ('st_mode = %o',sfile.st_mode);
tagasi 0;
}

Programmi koostamine ja käivitamine kuvatakse järgmiselt.

Selles koodis oleme edastanud stat -süsteemi kõnes faili nime ja seejärel kursori stat structurele, mis on sfile. Kursori stat struktuuri abil pääseb seejärel juurde st_mode, mis kuvab faili režiimi printf lause abil.

Päisefaili kasutatakse, et saaksite kasutada süsteemi süsteemikõnet. Päisefail on standardne sisend-/väljundraamatukogu fail, nii et saate oma C -koodis kasutada printf või scanf.

NÄIDE 2:

Järgmises koodis saame faili kohta teavet süsteemi süsteemi kõne abil:

KOOD:

#kaasake
#kaasake
#kaasake
#kaasake

tühinesfile(süsi constfaili nimi[]);

intpeamine(){
ssize_t loetud;
süsi*puhver= 0;
suurus_tbuf_size= 0;

printf ('Sisestage kontrollitava faili nimi: n');
loe=getline(&puhver, &buf_size,stdin);

kui (loe<=0 ){
printf (getline ebaõnnestus n');
väljumine (1);
}

kui (puhver[loe-1] == ' n'){
puhver[loe-1] = 0;
}

ints=lahti(puhver,O_RDONLY);
kui(s== -1){
printf ('Faili pole olemas n');
väljumine (1);
}
muidu{
sfile(puhver);
}
tasuta (puhver);
tagasi 0;
}

tühinesfile(süsi constfaili nimi[]){

struktuuriolekufail;

kui(osariik(faili nimi, &sfile)== -1){
printf ('Esines viga n');
}

// Juurdepääs statistilise struktuuri andmetele
printf (' nFail st_uid %d n',sfile.st_uid);
printf (' nFail st_blksize %ld n',sfile.st_blksize);
printf (' nFail st_gid %d n',sfile.st_gid);
printf (' nFail st_blocks %ld n',sfile.st_blocks);
printf (' nFail st_size %ld n',sfile.st_size);
printf (' nFail st_nlink% u n',(allkirjastamata int)sfile.st_nlink);
printf (' nFaililubade kasutaja n');
printf ((sfile.st_mode &S_IRUSR)? 'r':'-');
printf ((sfile.st_mode &S_IWUSR)? 'sisse':'-');
printf ((sfile.st_mode &S_IXUSR)? 'x':'-');
printf (' n');
printf (' nFaililubade rühm n');
printf ((sfile.st_mode &S_IRGRP)? 'r':'-');
printf ((sfile.st_mode &S_IWGRP)? 'sisse':'-');
printf ((sfile.st_mode &S_IXGRP)? 'x':'-');
printf (' n');
printf (' nFailiload Muu n');
printf ((sfile.st_mode &S_IROTH)? 'r':'-');
printf ((sfile.st_mode &S_IWOTH)? 'sisse':'-');
printf ((sfile.st_mode &S_IXOTH)? 'x':'-');
printf (' n');
}

VÄLJUND:

Ülaltoodud C -koodi sisestasime faili nime ja kui faili pole olemas, peatatakse programmi täitmine. Seda näitab järgmine pilt:

Kui meie fail on olemas, kutsutakse üles funktsioon sfile (n), milles oleme faili nime edastanud. Funktsiooni sees oleme kõigepealt kasutanud Stat -süsteemi kutset, kui stat () tagastab -1, siis peab ilmnema tõrge, nii et teade prinditakse ja programmi täitmine peatatakse.

Seejärel kasutasime printf -lauses andmete liikmetele juurdepääsuks funktsiooni nime ja punkti eraldajat stat structure .

Seejärel oleme failirežiimi jaoks avanud st_mode makrod või lipud. Siin kasutatakse vastavate režiimide printimiseks loogilist ja operaatorit. Oleme kontrollinud kasutaja, grupi ja teiste õigusi määratud faili jaoks (kasutaja sisestatud failinimi).

Selle abil näete, kuidas kasutada C -programmeerimiskeelest pärinevat stat -süsteemi kõnet, et saada OS -i kernelist teavet failide kohta. Kui teil on küsimusi, rääkige sellest meile kommentaaride jaotise kaudu.