Linuxi süsteemikõned
Linuxi tuuma pakutavad süsteemikõned paljastatakse glibc kaudu C-programmeerimiskeeles. Süsteemikõne kasutamisel suhtlete operatsioonisüsteemiga ja tagasipöördumisel operatsioonisüsteem teavitab teid süsteemikõne funktsioonidesse tagastatavate parameetrite kaudu (tagastusväärtused).
Stat süsteemi kõne:
Stat süsteemikõne on Linuxi süsteemikõne faili oleku kontrollimiseks, näiteks faili juurde pääsemise kontrollimiseks. Süsteemikõne stat () tagastab tegelikult failiatribuudid. Inoodi faili atribuudid tagastab põhimõtteliselt funktsioon Stat (). Inood sisaldab faili metaandmeid. Inood sisaldab: faili tüüpi, faili suurust, kui faili juurde pääseti (muudetud, kustutatud), st ajatemplit, ja faili teed, kasutajatunnust ja rühma ID, faili linke ja faili sisu füüsiline aadress.
Võib öelda, et inode sisaldab kõiki andmeid, mis on vajalikud süsteemikõnes stat (), ja see on faili indeksinumber, mis on salvestatud inode tabelisse. Alati, kui loote faili, luuakse selle faili jaoks inode number. Stat süsteemikõne abil saab vaadata süsteemitabeleid.
Süsteemi C Stat süntaks:
Stat-süsteemi kõne kasutamiseks C-programmeerimiskeeles peate lisama järgmise päisefaili:
# kaasataStat kasutatakse faili oleku saamiseks. C stat-süsteemi kõne süntaks ei pruugi olla sama kõigi operatsioonisüsteemide puhul. Linuxis on süsteemi süsteemikõne süntaks järgmine:
int stat (const char * tee, struct stat * buf)Funktsiooni tagastustüüp int, funktsiooni edukalt käivitamisel tagastatakse vigade 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 funktsioonis on meil a stat struktuur kuhu salvestatakse faili andmed või teave, mis kasutab kursorit nimega buf, mis antakse sisse parameetrina ja täidetakse kõne sooritamise ajal ning mida kasutaja saab pärast kõnet lugeda.
Stat struktuur:
Statistiline struktuur, mis on määratletud punktis
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;
;
Kirjeldus:
- st_dev: See on selle seadme ID, kus meie fail praegu elab.
- st_rdev: See väli kirjeldab, et konkreetne fail tähistab konkreetset seadet.
- st_ino: See on faili inode number või seerianumber. Kuna see on indeksinumber, peaks see olema kõigi failide jaoks ainulaadne
- st_size: st_size on faili suurus baitides.
- st_atime: See on viimane või viimane aeg, mil faili juurde pääseti.
- st_ctime: See on viimane aeg, mil faili olekut või õigusi muudeti.
- st_mtime: Praegu on faili muutmise viimane aeg.
- st_blksize: See väli annab eelistatud I / O-failisüsteemi ploki suuruse, mis võib failiti erineda.
- st_blocks: See väli näitab plokkide koguarvu 512 baiti kordades.
- st_nlink: See väli näitab kõvaketaste koguarvu.
- st_uid: See väli näitab kasutajatunnust.
- st_gid: See väli näitab rühma ID-d.
- 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 | Bitmask, mida kasutatakse faili režiimi väärtuse saamiseks | 0170000 |
S_IFSOCK | Pistikupesa failikonstant | 0140000 |
S_IFLINK | Sümboolse lingi failikonstant | 0120000 |
S_IFREG | Faili konstant tavalise faili jaoks | 0100000 |
S_IFBLK | Blokeerimisfaili failikonstant | 0060000 |
S_IFDIR | Kataloogifaili failikonstant | 0040000 |
S_IFCHR | Märgifaili faili konstant | 0020000 |
S_IFIFO | Failikonstant on fifo | 0010000 |
S_ISUID | Määra User ID bit | 0004000 |
S_ISGID | Määra grupi ID bit | 0002000 |
S_ISVTX | Kleepuv bitti, mis tähistab jagatud teksti | 0001000 |
S_IRWXU | Omaniku õigused (lugemine, kirjutamine, täitmine) | 00700 |
S_IRUSR | Lugege omaniku õigusi | 00400 |
S_IWUSR | Omanikule kirjutamisõigused | 00200 |
S_IXUSR | Käivitage omaniku õigused | 00100 |
S_IRWXG | Grupiõigused (lugemine, kirjutamine, täitmine) | 00070 |
S_IRGRP | Lugemisõigused rühmale | 00040 |
S_IWGRP | Rühma kirjutamisõigused | 00020 |
S_IXGRP | Käivitage rühma õigused | 00010 |
S_IRWXO | Teiste õigused (lugemine, kirjutamine, täitmine) | 00007 |
S_IROTH | Lugege teiste lubasid | 00004 |
S_IWOTH | Kirjutamisõigused teistele | 00002 |
S_IXOTH | Teiste jaoks lubade täitmine | 00001 |
Stat-süsteemi kõne kasutamine:
Järgmine näide näitab, kuidas stat-süsteemi kõnet C-programmeerimiskeeles kasutada Linuxis, Ubuntu.
NÄIDE 1:
Järgmises koodis leiame faili režiimi:
KOOD:
# kaasata# kaasata
int main ()
// kursor stat struktuurile
struct stat sfile;
// stat süsteemi kõne
stat ("stat.c ", & sfail);
// juurdepääs st_mode (statistilise struktuuri andmeliige)
printf ("st_mode =% o", sfile.st_mode);
tagastama 0;
Programmi kompileerimine ja käitamine tagastatakse järgmiselt:
Selles koodis oleme edastanud faili nime stat-süsteemi kõnes ja seejärel kursori stat structile, mis on sfile. Seejärel kasutatakse stat struktuuriga kursorit juurdepääsuks st_mode, mis kuvab faili režiimi printf-lauset kasutades.
Päisefail
NÄIDE 2:
Järgmises koodis saame teavet faili kohta, kasutades süsteemi süsteemi kõnet:
KOOD:
# kaasata# kaasata
# kaasata
# kaasata
void sfile (char const failinimi []);
int main ()
ssize_t lugeda;
char * puhver = 0;
suurus_t buf_suze = 0;
printf ("Sisestage kontrollitava faili nimi: \ n");
read = getline (& puhver, & buf_size, stdin);
kui (loe <=0 )
printf ("getline nurjus \ n");
väljapääs (1);
kui (puhver [loe-1] == '\ n')
puhver [loe-1] = 0;
int s = avatud (puhver, O_RDONLY);
kui (s == - 1)
printf ("Faili pole olemas \ n");
väljapääs (1);
veel
sfile (puhver);
vaba (puhver);
tagastama 0;
void sfile (char const failinimi [])
struct stat sfile;
if (stat (failinimi, & sfail) == - 1)
printf ("Ilmnes viga \ n");
// Juurdepääs statistilise struktuuri andmeliikmetele
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_blokid);
printf ("\ nFail st_size% ld \ n", sfile.st_suze);
printf ("\ nFail st_nlink% u \ n", (märkimata int) sfail.st_nlink);
printf ("\ nFailiõiguste kasutaja \ 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 ("\ nFaili õiguste rühm \ 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 ("\ nFailiõigused Muu \ 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ÄLJUND:
Ülaltoodud C-koodi sisestasime faili nime ja kui faili pole, peatatakse programmi käivitamine. Seda näitab järgmine pilt:
Kui meie fail on olemas, kutsutakse funktsioon sfile (n), milles oleme edastanud faili nime. Funktsiooni sees oleme kõigepealt kasutanud Stat-süsteemi kutset, kui stat () tagastab -1, siis peab olema viga, nii et prinditakse teade ja programmi täitmine peatatakse.
Siis oleme printf-lauses kasutanud funktsiooni ja punktide eraldaja nime, et pääseda juurde andmeliikmetele stat struct.
Seejärel oleme failirežiimi jaoks kasutanud st_mode makrosid või lippe. Siin kasutatakse vastavate režiimide printimiseks loogikat ja operaatorit. Oleme kontrollinud kasutaja, rühma ja teiste kasutajate õigusi määratud faili jaoks (kasutaja sisestatud failinimi).
Sellega näete, kuidas kasutada C-programmeerimiskeelt kasutavat statistikakõne operatsioonisüsteemi kernelilt failide kohta teabe saamiseks. Kui teil on küsimusi, rääkige sellest meile kommentaaride jaotises.