Sistemos skambučiai, kuriuos teikia „Linux“ branduolys, rodomi C programavimo kalba per „glibc“. Kai naudojamas sistemos skambutis, jūs bendraujate su OS, o grįžusi OS praneša jums per parametrus, kurie grąžinami į sistemos iškvietimo funkcijas (grąžinimo reikšmes).
Statinis sistemos skambutis:
„Stat system call“ yra sistemos skambutis sistemoje „Linux“, siekiant patikrinti failo būseną, pavyzdžiui, patikrinti, kada buvo pasiektas failas. Sistemos iškvietimas stat () iš tikrųjų grąžina failo atributus. Inode failo atributus iš esmės grąžina funkcija Stat (). Inode yra failo metaduomenys. „Inode“ yra: failo tipas, failo dydis, kai failas buvo pasiektas (pakeistas, ištrintas), tai yra laiko žymos, ir failo kelias, vartotojo ID ir grupės ID, failo nuorodos ir failo turinio fizinis adresas.
Galime pasakyti, kad „inode“ yra visi duomenys, reikalingi stat () sistemos iškvietimui, ir tai yra failo indekso numeris, išsaugotas inode lentelėje. Kai sukuriate failą, sukuriamas to failo inodo numeris. Naudojant stat sistemos iškvietimą galima peržiūrėti sistemos lenteles.
„C Stat“ sistemos skambučio sintaksė:
Norėdami naudoti sistemos sistemos iškvietimą C programavimo kalba, turite įtraukti šį antraštės failą:
#įtraukti
Stat naudojama failo būsenai gauti. „C stat“ sistemos skambučio sintaksė gali būti nevienoda kiekvienai operacinei sistemai. „Linux“ sistemoje sistemos iškvietimo sintaksė yra tokia:
tarptbūsena(konst anglis *kelias, strukturabūsena*buf)
Funkcijos grąžinimo tipas int, jei funkcija sėkmingai įvykdyta, grąžinama 0, jei yra klaidų, grąžinama -1.
Čia const char *kelias nurodo failo pavadinimą. Jei failo kelias yra simbolinė nuoroda, turite nurodyti nuorodą, o ne failo pavadinimą.
Tada funkcijoje turime statistinę struktūrą, kurioje saugomi duomenys ar informacija apie failą, naudojant rodyklę pavadinimu buf, kuris perduodamas kaip parametras ir užpildomas skambučio vykdymo metu, o vartotojas gali jį perskaityti po skambučio.
Statinė struktūra:
Antraštės faile apibrėžta statistinė struktūra apima šiuos laukus:
strukturabūsena{
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;
strukturatimspec st_atim;
strukturatimspec st_mtim;
strukturatimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};
Apibūdinimas:
- st_dev: Tai yra įrenginio, kuriame šiuo metu yra failas, ID.
- st_rdev: Šiame lauke aprašoma, kad tam tikras failas reiškia tam tikrą įrenginį.
- st_ino: Tai failo įvesties numeris arba serijos numeris. Kadangi tai yra indekso numeris, jis turėtų būti unikalus visiems failams
- st_size: st_size yra failo dydis baitais.
- st_atime: Tai paskutinis arba paskutinis laikas, kai buvo pasiektas failas.
- st_ctime: Tai paskutinis laikas, kai buvo pakeista failo būsena ar leidimai.
- st_mtime: Tai paskutinis laikas, kai failas buvo modifikuotas.
- st_blksize: Šiame lauke pateikiamas pageidaujamas įvesties/išvesties failų sistemos bloko dydis, kuris gali skirtis priklausomai nuo failo.
- st_blocks: Šis laukas nurodo bendrą blokų skaičių 512 baitų kartotiniais.
- st_nlink: Šis laukas nurodo bendrą kietųjų nuorodų skaičių.
- st_uid: Šiame lauke nurodomas vartotojo ID.
- st_gid: Šiame lauke nurodomas grupės ID.
- st_mode: Tai rodo failo leidimus, nurodo failo režimus. Toliau pateikiamos st_mode lauko vėliavos:
Vėliavos | apibūdinimas | Vėliavos vertė |
---|---|---|
S_IFMT | Bitų kaukė, naudojama failo režimo vertei gauti | 0170000 |
S_IFSOCK | Lizdo failo konstanta | 0140000 |
S_IFLINK | Simbolinės nuorodos failo konstanta | 0120000 |
S_IFREG | Failo konstanta įprastam failui | 0100000 |
S_IFBLK | Failo konstanta blokuojamam failui | 0060000 |
S_IFDIR | Katalogo failo konstanta | 0040000 |
S_IFCHR | Failų konstanta simbolių failams | 0020000 |
S_IFIFO | Failo konstanta - penki | 0010000 |
S_ISUID | Nustatykite „User ID“ bitą | 0004000 |
S_ISGID | Nustatykite grupės ID bitą | 0002000 |
S_ISVTX | Lipnus bitukas, nurodantis bendrinamą tekstą | 0001000 |
S_IRWXU | Savininko leidimai (skaityti, rašyti, vykdyti) | 00700 |
S_IRUSR | Skaitykite leidimus savininkui | 00400 |
S_IWUSR | Parašykite leidimus savininkui | 00200 |
S_IXUSR | Vykdyti leidimus savininkui | 00100 |
S_IRWXG | Grupės leidimai (skaityti, rašyti, vykdyti) | 00070 |
S_IRGRP | Skaitykite grupės leidimus | 00040 |
S_IWGRP | Rašykite leidimus grupei | 00020 |
S_IXGRP | Vykdyti grupės leidimus | 00010 |
S_IRWXO | Leidimai kitiems (skaityti, rašyti, vykdyti) | 00007 |
S_IROTH | Skaitykite leidimus kitiems | 00004 |
S_IWOTH | Rašykite leidimus kitiems | 00002 |
S_IXOTH | Vykdyti leidimus kitiems | 00001 |
Kaip naudotis „Stat“ sistemos skambučiu:
Šiame pavyzdyje parodyta, kaip naudoti sistemos sistemos iškvietimą C programavimo kalba „Linux“, „Ubuntu“.
1 PAVYZDYS:
Šiame kode mes rasime failo režimą:
KODAS:
#įtraukti#įtraukti
tarptpagrindinis()
{
// rodyklė į stat struktūrą
strukturabūsenos failas;
// stat sistemos skambutis
būsena('stat.c', &sfile);
// prieiga prie st_mode (duomenų struktūros narys)
printf ('st_mode = %o',sfile.st_mode);
grįžti 0;
}
Sukompiliuodami ir paleisdami programą grįšite taip:
Šiame kode mes perdavėme failo pavadinimą stat sistemos iškvietime, o tada rodyklę į stat struktūrą, kuri yra sfile. Tada rodyklė į stat struktūrą naudojama norint pasiekti st_mode, kuris rodo failo režimą naudojant printf sakinį.
Antraštės failas naudojamas, kad galėtumėte naudoti sistemos sistemos iškvietimą. Antraštės failas yra standartinis įvesties/išvesties bibliotekos failas, todėl savo C kode galite naudoti printf arba scanf.
2 PAVYZDYS:
Šiame kode mes gausime informacijos apie failą naudodami stat sistemos skambutį:
KODAS:
#įtraukti#įtraukti
#įtraukti
#įtraukti
tuštumasfile(anglis konstfailo pavadinimas[]);
tarptpagrindinis(){
ssize_t skaityti;
anglis*buferis= 0;
dydis_tbuf_size= 0;
printf („Įveskite failo, kurį norite patikrinti, pavadinimą: n');
skaityti=getline(&buferis, &buf_size,stdin);
jei (skaityti<=0 ){
printf („getline“ nepavyko n');
išeiti (1);
}
jei (buferis[skaityti-1] == ' n'){
buferis[skaityti-1] = 0;
}
tarpts=atviras(buferis,O_RDONLY);
jei(s== -1){
printf ('Failas neegzistuoja n');
išeiti (1);
}
Kitas{
sfile(buferis);
}
Laisvas (buferis);
grįžti 0;
}
tuštumasfile(anglis konstfailo pavadinimas[]){
strukturabūsenos failas;
jei(būsena(failo pavadinimas, &sfile)== -1){
printf ('Įvyko klaida n');
}
// Prieiga prie duomenų struktūros narių
printf (' nFailas st_uid %d n',sfile.st_uid);
printf (' nFailas st_blksize %ld n',sfile.st_blksize);
printf (' nFailas st_gid %d n',sfile.st_gid);
printf (' nFailas st_blocks %ld n',sfile.st_blocks);
printf (' nFailas st_size %ld n',sfile.st_size);
printf (' nFailas st_nlink% u n',(nepasirašytas tarpt)sfile.st_nlink);
printf (' nFailų leidimų vartotojas n');
printf ((sfile.st_mode &S_IRUSR)? „r“:'-');
printf ((sfile.st_mode &S_IWUSR)? 'in':'-');
printf ((sfile.st_mode &S_IXUSR)? „x“:'-');
printf (' n');
printf (' nFailų leidimų grupė n');
printf ((sfile.st_mode &S_IRGRP)? „r“:'-');
printf ((sfile.st_mode &S_IWGRP)? 'in':'-');
printf ((sfile.st_mode &S_IXGRP)? „x“:'-');
printf (' n');
printf (' nFailų leidimai Kiti n');
printf ((sfile.st_mode &S_IROTH)? „r“:'-');
printf ((sfile.st_mode &S_IWOTH)? 'in':'-');
printf ((sfile.st_mode &S_IXOTH)? „x“:'-');
printf (' n');
}
IŠVADA:
Aukščiau pateiktame C kode mes įvedėme failo pavadinimą ir, jei failo nėra, programos vykdymas bus sustabdytas. Tai parodyta šiame paveikslėlyje:
Jei mūsų failas egzistuoja, bus iškviesta funkcija sfile (n), kurioje perduosime failo pavadinimą. Funkcijos viduje pirmiausia naudojome Stat sistemos iškvietimą, jei stat () grąžina -1, tada turi būti bet kokia klaida, todėl pranešimas bus atspausdintas ir programos vykdymas sustabdytas.
Tada „printf“ sakinyje naudojome funkcijos pavadinimą ir taškinį skyriklį, kad pasiektume duomenų narius stat struktura .
Tada failo režimui pasiekėme st_mode makrokomandas ar vėliavas. Čia loginiai ir operatoriai naudojami atitinkamiems režimams spausdinti. Patikrinome, ar nėra vartotojo, grupės ir kitų leidimų nurodytam failui (vartotojo įvestas failo pavadinimas).
Tokiu būdu galite pamatyti, kaip naudoti „C“ programavimo kalbos „stat“ sistemos skambutį, kad gautumėte informaciją iš OS branduolio apie failus. Jei turite klausimų, nedvejodami praneškite mums per komentarų skiltį.