Sistemski pozivi

Stat System Call Linux Vodič

Stat System Call Linux Vodič

Pozivi Linux sustava

Sistemski pozivi koje pruža jezgra linux izloženi su u programskom jeziku C putem glibc.  Kada se koristi sistemski poziv, komunicirate s OS-om i po povratku OS komunicira s vama kroz parametre koji se vraćaju u funkcije sistemskog poziva (povratne vrijednosti).

Stat System Poziv:

Stat system call je sistemski poziv u Linuxu za provjeru statusa datoteke, poput provjere pristupa datoteci. Sistemski poziv stat () zapravo vraća atribute datoteke. Atributi datoteke inode u osnovi vraća funkcija Stat (). Inode sadrži metapodatke datoteke. Inode sadrži: vrstu datoteke, veličinu datoteke, kada je datoteci pristupljeno (izmijenjeno, izbrisano), odnosno vremenske oznake, te put datoteke, korisnički ID i ID grupe, veze datoteke i fizička adresa sadržaja datoteke.

Možemo reći da inode sadrži sve podatke potrebne za sistemski poziv stat () i to je indeksni broj datoteke koja se sprema u inode tablicu. Kad god kreirate datoteku, stvara se broj inode za tu datoteku. Korištenjem sistemskog poziva stat mogu se pregledavati tablice sustava.

Sintaksa sistemskog poziva C Stat:

Da biste koristili sistemski poziv stat u programskom jeziku C, morate uključiti sljedeću datoteku zaglavlja:

#include

Stat se koristi za dobivanje statusa datoteke. Sintaksa sistemskog poziva C stat možda neće biti ista za svaki operativni sustav. U Linuxu je sintaksa za sistemski poziv stat sljedeća:

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

Tip povrata funkcije u int, ako se funkcija uspješno izvrši, vraća se 0 ako postoje greške, vratit će se -1.

Ovdje const char * put određuje naziv datoteke. Ako je put do datoteke simbolična veza, tada morate navesti vezu umjesto naziva datoteke.

Tada u funkciji imamo a stat struktura u kojem se pohranjuju podaci ili podaci o datoteci koji koriste pokazivač s imenom buf, koji se predaje kao parametar i popunjava tijekom izvršenja poziva, a korisnik ga može pročitati nakon poziva.

Stat struktura:

Stat struktura koja je definirana u datoteka zaglavlja sadrži sljedeća polja:

strukt stat

mod_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;
;

Opis:

  1. st_dev: To je ID uređaja u kojem trenutno imamo svoju datoteku.
  2. st_rdev: Ovo polje opisuje da određena datoteka predstavlja određeni uređaj.
  3. st_ino: To je broj inode ili serijski broj datoteke. Kako je to indeksni broj, tako bi trebao biti jedinstven za sve datoteke
  4. st_size: st_size je veličina datoteke u bajtovima.
  5. st_atime: To je zadnji put ili nedavno vrijeme pristupanja datoteci.
  6. st_ctime: Nedavno je promijenjeno stanje ili dopuštenja datoteke.
  7. st_mtime: To je nedavno vrijeme u kojem je datoteka promijenjena.
  8. st_blksize: Ovo polje daje željenu veličinu bloka za I / O datotečni sustav koja se može razlikovati od datoteke do datoteke.
  9. st_blocks: Ovo polje govori ukupan broj blokova u višekratnicima od 512 bajtova.
  10. st_nlink: Ovo polje govori ukupan broj tvrdih veza.
  11. st_uid: Ovo polje označava korisnički ID.
  12. st_gid: Ovo polje označava ID grupe.
  13. st_mode: Označava dozvole za datoteku i govori o načinima rada na datoteci. Slijede zastave koje treba definirati za polje st_mode:
Zastave Opis Vrijednost zastave
S_IFMT Bitmaska ​​koja se koristi za dobivanje vrijednosti načina rada datoteke 0170000
S_IFSOCK Konstanta datoteke utičnice 0140000
S_IFLINK Konstanta datoteke simboličke veze 0120000
S_IFREG Konstanta datoteke za redovnu datoteku 0100000
S_IFBLK Datoteka konstanta za blok datoteku 0060000
S_IFDIR Datoteka konstanta za datoteku direktorija 0040000
S_IFCHR Datoteka konstanta za datoteku znakova 0020000
S_IFIFO Konstanta datoteke fifo 0010000
S_ISUID Postavite bit ID-a korisnika 0004000
S_ISGID Postavite bit ID-a grupe 0002000
S_ISVTX Ljepljivi bit koji označava zajednički tekst 0001000
S_IRWXU Vlasnička dopuštenja (čitanje, pisanje, izvršavanje) 00700
S_IRUSR Pročitajte dopuštenja za vlasnika 00400
S_IWUSR Napišite dozvole za vlasnika 00200
S_IXUSR Izvršiti dozvole za vlasnika 00100
S_IRWXG Grupna dopuštenja (čitanje, pisanje, izvršavanje) 00070
S_IRGRP Pročitajte dopuštenja za grupu 00040
S_IWGRP Napišite dopuštenja za grupu 00020
S_IXGRP Izvršiti dopuštenja za grupu 00010
S_IRWXO Dopuštenja za druge (čitanje, pisanje, izvršavanje) 00007
S_IROTH Pročitajte dopuštenja za druge 00004
S_IWOTH Napišite dopuštenja za druge 00002
S_IXOTH Izvršite dopuštenja za druge 00001

Kako se koristi sistemski poziv Stat:

Sljedeći primjer pokazuje kako koristiti stat sistemski poziv u programskom jeziku C u Linuxu, Ubuntuu.

PRIMJER 1:

U sljedećem ćemo kodu pronaći način datoteke:

KODIRATI:

#include
#include
int main ()

// pokazivač na stat struct
struct stat sfile;
// stat sistemski poziv
stat ("stat.c ", & sfile);
// pristup st_mode (član podataka stat struct)
printf ("st_mode =% o", sfile.st_mode);
return 0;

Sastavljanje i izvođenje programa vraća se kao u nastavku:

U ovom kodu proslijedili smo ime datoteke u sistemskom pozivu stat, a zatim pokazivač na stat struct koji je sfile. Pokazivač na stat struct se zatim koristi za pristup st_mode koji prikazuje način rada datoteke pomoću ispisa printf.

Datoteka zaglavlja koristi se tako da možete koristiti sistemski poziv stat. Datoteka zaglavlja je standardna datoteka ulazno / izlazne biblioteke tako da možete koristiti printf ili scanf u svom C kodu.

PRIMJER 2:

U sljedećem kodu dobit ćemo informacije o datoteci pomoću sistemskog poziva stat:

KODIRATI:

#include
#include
#include
#include
void sfile (naziv datoteke char const []);
int main ()
ssize_t pročitati;
char * međuspremnik = 0;
size_t buf_size = 0;
printf ("Unesite ime datoteke za provjeru: \ n");
read = getline (& buffer, & buf_size, stdin);
ako (čitaj <=0 )
printf ("getline nije uspio \ n");
izlaz (1);

if (međuspremnik [read-1] == '\ n')
međuspremnik [čitanje-1] = 0;

int s = otvoren (međuspremnik, O_RDONLY);
ako (s == - 1)
printf ("Datoteka ne postoji \ n");
izlaz (1);

drugo
sfile (međuspremnik);

besplatno (tampon);
return 0;

void sfile (char const naziv datoteke [])
struct stat sfile;
if (stat (naziv datoteke, & sfile) == - 1)
printf ("Dogodila se pogreška \ n");

// Pristup članovima podataka stat struct
printf ("\ nDatoteka st_uid% d \ n", sfile.st_uid);
printf ("\ nDatoteka st_blksize% ld \ n", sfile.st_blksize);
printf ("\ nDatoteka st_gid% d \ n", sfile.st_gid);
printf ("\ nDatoteka st_blocks% ld \ n", sfile.st_blocks);
printf ("\ nDatoteka st_size% ld \ n", sfile.st_size);
printf ("\ nDatoteka st_nlink% u \ n", (nepotpisani int) sfile.st_nlink);
printf ("\ nKorisnik dozvola datoteke \ 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 ("\ nFile Group Permissions Group \ 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 ("\ nDopuštenja za datoteke \ n");
printf ((sfile.st_mode & S_IROTH)? "r": "-");
printf ((sfile.st_mode & S_IWOTH)? "w": "-");
printf ((sfile.st_mode & S_IXOTH)? "x":"-");
printf ("\ n");

IZLAZ:

U gornji C kod unijeli smo ime datoteke i ako datoteka ne postoji, izvršenje programa će biti zaustavljeno. To je prikazano na sljedećoj slici:

Ako naša datoteka postoji, pozvat će se funkcija sfile (n) u koju smo proslijedili ime datoteke. Unutar funkcije, prije svega koristili smo sistemski poziv Stat, ako stat () vrati -1, onda mora postojati bilo kakva pogreška pa će se ispisati poruka i zaustaviti izvršavanje programa.

Tada smo u izjavi printf koristili ime funkcije i odvajač točaka za pristup članovima podataka stat struct.

Tada smo za način datoteke pristupili makronaredbama ili zastavicama st_mode. Ovdje se za ispis odgovarajućih načina koristi logički i operator. Provjerili smo ima li dozvola za korisnika, grupu i ostale za navedenu datoteku (naziv datoteke unosi korisnik).

Ovim možete vidjeti kako koristiti sistemski poziv stat iz programskog jezika C za dobivanje informacija iz jezgre OS-a o datotekama.  Ako imate pitanje, slobodno nam recite putem odjeljka za komentare.

Trackpad i pokazivač miša na ekranu AppyMouse za Windows tablete
Korisnicima tableta često nedostaje pokazivač miša, posebno kada su navični koristiti prijenosna računala. Pametni telefoni i tableti osjetljivi na do...
Srednja tipka miša ne radi u sustavu Windows 10
The srednja tipka miša pomaže vam u pomicanju kroz dugačke web stranice i zaslone s puno podataka. Ako se to zaustavi, na kraju ćete koristiti tipkovn...
Kako promijeniti lijevu i desnu tipku miša na računalu sa sustavom Windows 10
Sasvim je normalno da su svi uređaji računalnog miša ergonomski dizajnirani za dešnjake. Ali postoje dostupni uređaji za miš koji su posebno dizajnira...