Sistemos skambučiai

„Stat System“ skambučio „Linux“ pamoka

„Stat System“ skambučio „Linux“ pamoka

„Linux“ sistemos skambučiai

Sistemos skambučiai, kuriuos teikia „Linux“ branduolys, yra matomi C programavimo kalba per glibc.  Kai naudojamas sistemos skambutis, jūs bendraujate su OS, o grįžę OS jums praneša per parametrus, kurie grąžinami į sistemos skambučio funkcijas (grąžinimo reikšmės).

„Stat“ sistemos iškvietimas:

„Stat“ sistemos iškvietimas yra „Linux“ sistemos skambutis, skirtas patikrinti failo būseną, pavyzdžiui, patikrinti, kada buvo pasiektas failas. Stat () sistemos iškvietimas iš tikrųjų grąžina failo atributus. Inodo failo atributus iš esmės grąžina funkcija Stat (). Inode yra failo metaduomenys. Inode yra: failo tipas, failo dydis, kai buvo pasiektas failas (modifikuotas, ištrintas), tai yra laiko žymos, ir failo kelias, vartotojo ID ir grupės ID, failo nuorodos ir failo turinio fizinis adresas.

Galime sakyti, kad „inode“ yra visi duomenys, reikalingi „stat ()“ sistemos iškvietimui, ir tai yra failo indekso numeris, kuris yra išsaugotas „inode“ lentelėje. Kai kuriate failą, sukuriamas to failo inodo numeris. Naudojant stat sistemos iškvietimą, galima peržiūrėti sistemos lenteles.

C Stat sistemos iškvietimo sintaksė:

Norėdami naudoti „Stat“ sistemos iškvietimą C programavimo kalba, turite įtraukti šį antraštės failą:

# įtraukti

Stat naudojamas norint gauti failo būseną. „C stat“ sistemos skambučio sintaksė gali būti nevienoda kiekvienoje operacinėje sistemoje. „Linux“ sisteminės statistikos iškvietimo sintaksė yra tokia:

int stat (const char * kelias, struct stat * buf)

Funkcijos grąžinimo tipas tarpt, jei funkcija vykdoma sėkmingai, grąžinama 0, jei yra klaidų, grąžinama -1.

Čia const char * kelias nurodo failo pavadinimą. Jei failo kelias yra simbolinė nuoroda, vietoj failo pavadinimo turite nurodyti nuorodą.

Tada funkcijoje turime a stat struktūra kuriame saugomi duomenys ar informacija apie failą, kuriame naudojamas rodyklė buf, kuris perduodamas kaip parameteris ir užpildomas skambučio metu ir kurį vartotojas gali perskaityti po skambučio.

Stat struktūra:

Stat struktūra, apibrėžta antraštės faile yra šie laukai:

strukt. 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;
;

Apibūdinimas:

  1. st_dev: Šiuo metu yra įrenginio, kuriame turime failą, ID.
  2. st_rdev: Šiame lauke aprašoma, kad konkretus failas reiškia konkretų įrenginį.
  3. st_ino: Tai failo inodo numeris arba serijos numeris. Kadangi tai yra indekso numeris, jis turėtų būti unikalus visiems failams
  4. st_size: st_size yra failo dydis baitais.
  5. st_atime: Tai paskutinis ar paskutinis laikas, kai buvo pasiekta byla.
  6. st_ctime: Tai paskutinis laikas, kai buvo pakeista failo būsena arba leidimai.
  7. st_mtime: Tai paskutinis failo modifikavimo laikas.
  8. st_blksize: Šiame lauke nurodomas pageidaujamas įvesties / išvesties failų sistemos bloko dydis, kuris kiekviename faile gali skirtis.
  9. st_blocks: Šis laukas nurodo bendrą blokų skaičių 512 baitų kartotiniais.
  10. st_nlink: Šis laukas nurodo bendrą standžiųjų nuorodų skaičių.
  11. st_uid: Šis laukas nurodo vartotojo ID.
  12. st_gid: Šis laukas nurodo grupės ID.
  13. st_mode: Tai nurodo failo teises, nurodo failo režimus. Toliau pateikiamos žymos, kurios turėtų būti apibrėžtos lauke st_mode:
Vėliavos apibūdinimas Vėliavos vertė
S_IFMT Bitmaskas naudojamas 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 Bloko failo failo konstanta 0060000
S_IFDIR Katalogo failo konstanta 0040000
S_IFCHR Failo konstanta simbolių failui 0020000
S_IFIFO Failo konstanta yra fifo 0010000
S_ISUID Nustatykite „User ID“ bitą 0004000
S_ISGID Nustatykite grupės ID bitą 0002000
S_ISVTX Lipnus antgalis, nurodantis bendrą tekstą 0001000
S_IRWXU Savininko leidimai (skaityti, rašyti, vykdyti) 00700
S_IRUSR Skaityti leidimus savininkui 00400
S_IWUSR Rašymo leidimai savininkui 00200
S_IXUSR Vykdyti savininko leidimus 00100
S_IRWXG Grupės leidimai (skaityti, rašyti, vykdyti) 00070
S_IRGRP Grupės skaitymo leidimai 00040
S_IWGRP Rašymo leidimai 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šymo leidimai kitiems 00002
S_IXOTH Vykdyti leidimus kitiems 00001

Kaip naudotis „Stat“ sistemos iškvietimu:

Šis pavyzdys rodo, kaip naudoti „Stat“ sistemos skambutį C programavimo kalba „Linux“, „Ubuntu“.

1 PAVYZDYS:

Šiame kode rasime failo režimą:

KODAS:

# įtraukti
# įtraukti
int main ()

// rodyklė į stat struct
struct stat sfile;
// stat sistemos iškvietimas
stat ("stat.c ", & sfile);
// prieiga prie st_mode (statistinės struktūros duomenų narys)
printf ("st_mode =% o", sfile.st_mode);
grąžinti 0;

Kompiliuojant ir vykdant programą grąžinama taip:

Šiame kode mes perdavėme failo pavadinimą į „Stat“ sistemos iškvietimą ir tada rodyklę į „stat struct“, kuri yra sfile. Tada žymeklis į stat struct naudojamas norint pasiekti st_mode, kuris rodo failo režimą naudodamas „printf“ pareiškimą.

Antraštės failas yra naudojamas, todėl galite naudoti stat sistemos iškvietimą. Antraštės failas yra standartinis įvesties / išvesties bibliotekos failas, kad C kode galėtumėte naudoti „printf“ arba „scanf“.

2 PAVYZDYS:

Šiame kode gausime informaciją apie failą naudodami stat sistemos iškvietimą:

KODAS:

# įtraukti
# įtraukti
# įtraukti
# įtraukti
void sfile (char const failo pavadinimas []);
int main ()
ssize_t skaityti;
char * buferis = 0;
dydis_t buf_size = 0;
printf ("Įveskite failo pavadinimą, kurį norite patikrinti: \ n");
read = getline (& buferis, & buf_size, stdin);
jei (skaityti <=0 )
printf ("getline nepavyko \ n");
išėjimas (1);

jei (buferis [skaityti-1] == '\ n')
buferis [skaityti-1] = 0;

int s = atviras (buferis, O_RDONLY);
jei (s == - 1)
printf ("Failo nėra \ n");
išėjimas (1);

Kitas
sfile (buferis);

laisvas (buferis);
grąžinti 0;

negaliojantis sfile (char const failo pavadinimas [])
struct stat sfile;
jei (stat (failo pavadinimas, & sfile) == - 1)
printf ("Įvyko klaida \ n");

// Prieiga prie statistikos struktūros duomenų narių
printf ("\ nFile st_uid% d \ n", sfile.st_uid);
printf ("\ nFile st_blksize% ld \ n", sfile.st_blksize);
printf ("\ nFile st_gid% d \ n", sfile.st_gid);
printf ("\ nFile st_blocks% ld \ n", sfile.blokai);
printf ("\ nFile st_size% ld \ n", sfile.st_size);
printf ("\ nFile st_nlink% u \ n", (nepasirašytas int) sfile.st_nlink);
printf ("\ nFailo leidimų vartotojas \ 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 ("\ nFailo teisių grupė \ 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 ("\ nKito failo leidimai \ n");
printf ((sfile.st_mode & S_IROTH)? „r“: „-“);
printf ((sfile.st_mode & S_IWOTH)? „w“: „-“);
printf ((sfile.st_mode & S_IXOTH)? „x“: „-“);
printf ("\ n");

IŠĖJIMAS:

Pirmiau 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 mes perdavėme failo pavadinimą. Funkcijos viduje visų pirma mes naudojome „Stat“ sistemos iškvietimą, jei stat () grąžina -1, tada turi būti bet kokia klaida, todėl bus išspausdintas pranešimas ir sustabdytas programos vykdymas.

Tada „printf“ sakinyje mes naudojome funkcijos pavadinimą ir taškų skyriklį, kad galėtume pasiekti duomenų narius stat strukt.

Tada failo režimui mes pasiekėme st_mode makrokomandas arba vėliavas. Čia loginiai ir operatoriai naudojami spausdinti atitinkamus režimus. Patikrinome, ar nėra vartotojo, grupės ir kitų nurodyto failo (vartotojo įvesto failo pavadinimo) leidimų.

Tai galite pamatyti, kaip naudotis stat sistemos iškvietimu iš C programavimo kalbos, norint gauti informacijos iš OS branduolio apie failus.  Jei turite klausimų, praneškite mums per komentarų skyrių.

„SuperTuxKart“, skirta „Linux“
„SuperTuxKart“ yra puikus pavadinimas, sukurtas nemokamai suteikti „Mario Kart“ patirtį jūsų „Linux“ sistemoje. Tai gana sudėtinga ir smagu žaisti, yr...
„Battle for Wesnoth“ pamoka
„Battle for Wesnoth“ yra vienas populiariausių atvirojo kodo strateginių žaidimų, kurį šiuo metu galite žaisti. Šis žaidimas ne tik buvo kuriamas laba...
0 A.D. Pamoka
Iš daugybės strateginių žaidimų 0 A.D. sugeba išsiskirti kaip išsamus pavadinimas ir labai gilus, taktinis žaidimas, nepaisant to, kad yra atviro kodo...