Stat System Call Linux apmācība

Stat System Call Linux Tutorial



Sistēmas zvani, ko nodrošina Linux kodols, tiek atklāti C programmēšanas valodā, izmantojot glibc. Kad tiek izmantots sistēmas zvans, jūs sazināties ar OS, un pēc atgriešanās OS paziņo jums, izmantojot parametrus, kas tiek atgriezti sistēmas izsaukuma funkcijās (atgriešanās vērtības).

Stat System Call:

Stat sistēmas zvans ir sistēmas zvans operētājsistēmā Linux, lai pārbaudītu faila statusu, piemēram, lai pārbaudītu, kad failam tika piekļūts. Sistēmas izsaukums stat () faktiski atgriež faila atribūtus. Inode faila atribūtus pamatā atgriež funkcija Stat (). Inode satur faila metadatus. Inode satur: faila veidu, faila lielumu, kad fails tika piekļūts (mainīts, dzēsts), kas ir laika zīmogi, un faila ceļu, lietotāja ID un grupas ID, faila saites un faila satura fiziskā adrese.







Mēs varam teikt, ka inode satur visus datus, kas nepieciešami sistēmas izsaukumam stat (), un tas ir faila indeksa numurs, kas tiek saglabāts inode tabulā. Ikreiz, kad izveidojat failu, šim failam tiek izveidots inode numurs. Izmantojot stat sistēmas zvanu, var apskatīt sistēmas tabulas.



C Stat sistēmas izsaukuma sintakse:

Lai izmantotu stat sistēmas izsaukumu C programmēšanas valodā, jums jāiekļauj šāds galvenes fails:



#iekļaut

Stat tiek izmantots, lai iegūtu faila statusu. C stat sistēmas izsaukuma sintakse katrai operētājsistēmai var nebūt vienāda. Linux sistēmā stat sistēmas izsaukuma sintakse ir šāda:





intValsts(konst char *ceļš, struktūraValsts*buf)

Funkcijas atgriešanās veids int, ja funkcija tiek izpildīta veiksmīgi, kļūdu gadījumā tiek atgriezts 0, tiks atgriezts -1.

Šeit const char *ceļš norāda faila nosaukumu. Ja faila ceļš ir simboliska saite, tad faila nosaukuma vietā ir jānorāda saite.



Tad funkcijā mums ir stat struktūra, kurā tiek glabāti dati vai informācija par failu, kurā tiek izmantots rādītājs ar nosaukumu buf, kas tiek nodots kā parametrs un tiek aizpildīts zvana izpildes laikā, un lietotājs to var nolasīt pēc zvana.

Statiskā struktūra:

Galvenes failā definētā statistikas struktūra satur šādus laukus:

struktūraValsts
{
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;
struktūratimspec st_atim;
struktūratimspec st_mtim;
struktūratimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Apraksts:

  1. st_dev: Tas ir tās ierīces ID, kurā pašlaik atrodas mūsu fails.
  2. st_rdev: Šis lauks apraksta, ka konkrēts fails attēlo noteiktu ierīci.
  3. st_ino: Tas ir faila ievades numurs vai sērijas numurs. Tā kā tas ir indeksa numurs, tam jābūt unikālam visiem failiem
  4. st_size: st_size ir faila lielums baitos.
  5. st_atime: Šī ir pēdējā vai pēdējā reize, kad fails tika piekļūts.
  6. st_ctime: Tas ir nesenais laiks, kad tika mainīts faila statuss vai atļaujas.
  7. st_mtime: Tas ir nesenais laiks, kad fails tika modificēts.
  8. st_blksize: Šis lauks norāda vēlamo I/O failu sistēmas bloka lielumu, kas var atšķirties atkarībā no faila.
  9. st_blocks: Šis lauks norāda kopējo bloku skaitu 512 baitu reizinājumos.
  10. st_nlink: Šis lauks norāda kopējo cieto saišu skaitu.
  11. st_uid: Šis lauks norāda lietotāja ID.
  12. st_gid: Šis lauks norāda grupas ID.
  13. st_mode: Tas norāda faila atļaujas, norāda faila režīmus. Tālāk ir norādīti karodziņi, kas jādefinē laukam st_mode:
Karogi Apraksts Karoga vērtība
S_IFMT Bitmaska, ko izmanto, lai iegūtu faila režīma vērtību 0170000
S_IFSOCK Faila konstante ligzdā 0140000
S_IFLINK Simboliskās saites faila konstante 0120000
S_IFREG Faila konstante parastajam failam 0100000
S_IFBLK Failu konstante bloka failam 0060000
S_IFDIR Failu konstante direktoriju failam 0040000
S_IFCHR Failu konstante rakstzīmju failam 0020000
S_IFIFO Faila konstante pieci 0010000
S_ISUID Iestatiet User ID bitu 0004000
S_ISGID Iestatiet grupas ID bitu 0002000
S_ISVTX Lipīgs uzgalis, kas norāda koplietojamu tekstu 0001000
S_IRWXU Īpašnieka atļaujas (lasīt, rakstīt, izpildīt) 00700
S_IRUSR Izlasiet atļaujas īpašniekam 00400
S_IWUSR Uzrakstiet atļaujas īpašniekam 00200
S_IXUSR Izpildiet īpašnieka atļaujas 00100
S_IRWXG Grupas atļaujas (lasīt, rakstīt, izpildīt) 00070
S_IRGRP Izlasiet grupas atļaujas 00040
S_IWGRP Rakstiet atļaujas grupai 00020
S_IXGRP Izpildiet grupas atļaujas 00010
S_IRWXO Atļaujas citiem (lasīt, rakstīt, izpildīt) 00007
S_IROTH Lasiet Atļaujas citiem 00004
S_IWOTH Uzrakstiet atļaujas citiem 00002
S_IXOTH Izpildiet atļaujas citiem 00001

Kā izmantot Stat sistēmas zvanu:

Šis piemērs parāda, kā izmantot sistēmas sistēmas zvanu C programmēšanas valodā Linux, Ubuntu.

1. PIEMĒRS:

Šajā kodā mēs atradīsim faila režīmu:

KODS:

#iekļaut
#iekļaut
intgalvenais()
{
// rādītājs uz stat structure
struktūraštata fails;

// stat sistēmas zvans
Valsts('stat.c', &sfile);

// piekļuve st_mode (stat structure datu dalībnieks)
printf ('st_mode = %o',sfile.st_mode);
atgriezties 0;
}

Programmas apkopošana un palaišana tiek parādīta zemāk:

Šajā kodā mēs esam nodevuši faila nosaukumu stat sistēmas izsaukumā un pēc tam rādītāju uz stat structure, kas ir sfile. Rādītājs stat structure tiek izmantots, lai piekļūtu st_mode, kas parāda faila režīmu, izmantojot printf paziņojumu.

Galvenes fails tiek izmantots, lai jūs varētu izmantot stat sistēmas zvanu. Galvenes fails ir standarta ievades/izvades bibliotēkas fails, lai C kodā varētu izmantot printf vai scanf.

2. PIEMĒRS:

Šajā kodā mēs iegūsim informāciju par failu, izmantojot stat sistēmas zvanu:

KODS:

#iekļaut
#iekļaut
#iekļaut
#iekļaut

spēkā neesošssfile(char konstfaila nosaukums[]);

intgalvenais(){
ssize_t lasīt;
char*buferšķīdums= 0;
size_tbuf_size= 0;

printf ('Ievadiet pārbaudāmā faila nosaukumu: n');
lasīt=getline(&buferšķīdums, &buf_size,stdin);

ja (lasīt<=0 ){
printf (getline neizdevās n');
Izeja (1);
}

ja (buferšķīdums[lasīt-1] == ' n'){
buferšķīdums[lasīt-1] = 0;
}

ints=atvērts(buferšķīdums,O_RDONLY);
ja(s== -1){
printf ('Fails neeksistē n');
Izeja (1);
}
citādi{
sfile(buferšķīdums);
}
bezmaksas (buferšķīdums);
atgriezties 0;
}

spēkā neesošssfile(char konstfaila nosaukums[]){

struktūraštata fails;

ja(Valsts(faila nosaukums, &sfile)== -1){
printf ('Uzradās kļūda n');
}

// Piekļuve stat structure datu dalībniekiem
printf (' nFails st_uid %d n',sfile.st_uid);
printf (' nFails st_blksize %ld n',sfile.st_blksize);
printf (' nFails st_gid %d n',sfile.st_gid);
printf (' nFails st_blocks %ld n',sfile.st_blocks);
printf (' nFails st_size %ld n',sfile.st_size);
printf (' nFails st_nlink% u n',(neparakstīts int)sfile.st_nlink);
printf (' nFailu atļauju lietotājs 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 (' nFailu atļauju grupa 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 (' nCitas failu atļaujas n');
printf ((sfile.st_mode &S_IROTH)? 'r':'-');
printf ((sfile.st_mode &S_IWOTH)? 'in':'-');
printf ((sfile.st_mode &S_IXOTH)? 'x':'-');
printf (' n');
}

Izeja:

Iepriekš minētajā C kodā mēs esam ievadījuši faila nosaukumu un, ja fails neeksistē, programmas izpilde tiks pārtraukta. Tas ir parādīts šādā attēlā:

Ja mūsu fails pastāv, tiks izsaukta funkcija sfile (n), kurā mēs esam nodevuši faila nosaukumu. Funkcijas iekšpusē, pirmkārt, mēs esam izmantojuši Stat sistēmas izsaukumu, ja stat () atgriež -1, tad ir jābūt kļūdai, tāpēc tiks izdrukāts ziņojums un programmas izpilde tiks pārtraukta.

Tad printf paziņojumā mēs esam izmantojuši funkcijas nosaukumu un punktu atdalītāju, lai piekļūtu datu dalībniekiem stat struktura .

Tad faila režīmam mēs esam piekļuvuši st_mode makro vai karodziņiem. Šeit atbilstošo režīmu drukāšanai tiek izmantots loģiskais un operators. Mēs esam pārbaudījuši atļaujas lietotājam, grupai un citiem norādītajam failam (lietotāja ievadītais faila nosaukums).

Ar to jūs varat redzēt, kā izmantot C sistēmas programmēšanas valodas stat sistēmas zvanu, lai iegūtu informāciju no OS kodola par failiem. Ja jums ir jautājums, lūdzu, pastāstiet mums, izmantojot komentāru sadaļu.