Systemopkald

Stat System Call Linux-vejledning

Stat System Call Linux-vejledning

Linux-systemopkald

Systemopkald leveret af linux-kernen eksponeres på C-programmeringssproget via glibc.  Når der bruges et systemopkald, kommunikerer du til operativsystemet, og når du vender tilbage, kommunikerer operativsystemet til dig gennem de parametre, der returneres til systemopkaldsfunktioner (returværdier).

Stat-systemopkald:

Stat-systemopkald er et systemopkald i Linux for at kontrollere status for en fil, f.eks. For at kontrollere, hvornår filen blev åbnet. Systemopkaldet stat () returnerer faktisk filattributter. Filattributterne for en inode returneres grundlæggende af funktionen Stat (). En inode indeholder filens metadata. En inode indeholder: filtypen, filstørrelsen, da filen blev åbnet (ændret, slettet), der er tidsstempler, og stien til filen, bruger-id'et og gruppe-id'et, filens links og fysisk adresse på filindhold.

Vi kan sige, at inode indeholder alle de data, der kræves til stat () systemopkaldet, og det er indeksnummeret for filen, der gemmes i inodetabellen. Når du opretter en fil, oprettes der et inodenummer for den pågældende fil. Ved hjælp af stat systemopkald kan systemtabellerne vises.

Syntaks for C Stat-systemopkald:

For at bruge stat-systemopkaldet i C-programmeringssprog skal du medtage følgende headerfil:

#omfatte

Stat bruges til at få status på en fil. Syntaksen for C stat-systemopkald er muligvis ikke den samme for hvert operativsystem. I Linux er syntaksen for stat-systemopkald som følger:

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

Funktionens returtype i int, hvis funktionen udføres med succes, returneres 0, hvis der er fejl, -1 returneres.

Her const char * sti angiver filens navn. Hvis filstien er et symbolsk link, skal du angive linket i stedet for filnavnet.

Så i funktionen har vi en stat struktur hvor data eller oplysninger om filen er gemt, der bruger en markør med navnet buf, som sendes ind som parametreter og udfyldes under udførelsen af ​​opkaldet og læses af brugeren efter opkaldet.

Stat struktur:

Den statstruktur, der er defineret i header-fil indeholder følgende felter:

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

Beskrivelse:

  1. st_dev: Det er id'et for den enhed, hvor vi har vores fil i øjeblikket.
  2. st_rdev: Dette felt beskriver, at en bestemt fil repræsenterer en bestemt enhed.
  3. st_ino: Det er filens inode nummer eller serienummer. Da det er et indeksnummer, skal det være unikt for alle filer
  4. st_størrelse: st_size er størrelsen på filen i byte.
  5. st_atime: Det er sidste gang eller det seneste tidspunkt, hvor filen blev åbnet.
  6. st_ctime: Det er det seneste tidspunkt, hvor status eller tilladelser for filen blev ændret.
  7. st_mtime: Det er det seneste tidspunkt, hvor filen blev ændret.
  8. st_blksstørrelse: Dette felt giver den foretrukne blokstørrelse for I / O-filsystemet, som kan variere fra fil til fil.
  9. st_blocks: Dette felt fortæller det samlede antal blokke i multipla på 512 bytes.
  10. st_nlink: Dette felt fortæller det samlede antal hårde links.
  11. st_uid: Dette felt angiver bruger-ID'et.
  12. st_gid: Dette felt angiver gruppe-id'et.
  13. st_mode: Det angiver tilladelserne til filen, fortæller tilstande for en fil. Følgende er de flag, der skal defineres for st_mode-feltet:
Flag Beskrivelse Flagværdi
S_IFMT En bitmask bruges til at få tilstandsværdien af ​​en fil 0170000
S_IFSOCK En filkonstant i stikkontakten 0140000
S_IFLINK En filkonstant med symbolsk link 0120000
S_IFREG Filkonstant for almindelig fil 0100000
S_IFBLK Filkonstant for blokfil 0060000
S_IFDIR Filkonstant for katalogfil 0040000
S_IFCHR Filkonstant for tegnfil 0020000
S_IFIFO En filkonstant på fiveo 0010000
S_ISUID Indstil bruger-ID-bit 0004000
S_ISGID Indstil gruppe-id-bit 0002000
S_ISVTX Sticky bit, der angiver delt tekst 0001000
S_IRWXU Ejertilladelser (læs, skriv, udfør) 00700
S_IRUSR Læs tilladelser til ejeren 00400
S_IWUSR Skriv tilladelser til ejeren 00200
S_IXUSR Udfør tilladelser til ejeren 00100
S_IRWXG Gruppetilladelser (læs, skriv, udfør) 00070
S_IRGRP Læs tilladelser for gruppen 00040
S_IWGRP Skriv tilladelser til gruppe 00020
S_IXGRP Udfør tilladelser til gruppen 00010
S_IRWXO Tilladelser til andre (læs, skriv, udfør) 00007
S_IROTH Læs tilladelser for andre 00004
S_IWOTH Skriv tilladelser til andre 00002
S_IXOTH Udfør tilladelser til andre 00001

Sådan bruges Stat-systemopkald:

Følgende eksempel viser, hvordan man bruger stat-systemopkald i C-programmeringssprog i Linux, Ubuntu.

EKSEMPEL 1:

I den følgende kode skal vi finde tilstanden til en fil:

KODE:

#omfatte
#omfatte
int main ()

// markør til stat struct
struktur stat sfile;
// stat systemopkald
stat ("stat.c ", & sfile);
// adgang til st_mode (data medlem af stat struct)
printf ("st_mode =% o", sfile.st_mode);
returnere 0;

Kompilering og kørsel af programmet vender tilbage som nedenfor:

I denne kode har vi sendt navnet på filen i stat systemopkald og derefter markøren til stat struct, der er sfile. Markøren til stat struct bruges derefter til at få adgang til st_mode, som viser filens tilstand ved hjælp af printf-sætning.

Overskriftsfilen bruges, så du kan bruge stat systemopkald. Overskriftsfilen er standard input / output biblioteksfilen, så du kan bruge printf eller scanf i din C-kode.

EKSEMPEL 2:

I den følgende kode vil vi få oplysninger om filen ved hjælp af stat systemopkald:

KODE:

#omfatte
#omfatte
#omfatte
#omfatte
ugyldigt sfile (char const filnavn []);
int main ()
ssize_t læse;
char * buffer = 0;
size_t buf_size = 0;
printf ("Indtast navnet på en fil, der skal kontrolleres: \ n");
læse = getline (& buffer, & buf_size, stdin);
hvis (læs <=0 )
printf ("getline mislykkedes \ n");
udgang (1);

hvis (buffer [read-1] == '\ n')
buffer [read-1] = 0;

int s = åben (buffer, O_RDONLY);
hvis (s == - 1)
printf ("Filen findes ikke \ n");
udgang (1);

andet
sfile (buffer);

fri (buffer);
returnere 0;

ugyldigt sfile (char const filnavn [])
struktur stat sfile;
hvis (stat (filnavn, & sfile) == - 1)
printf ("Der opstod en fejl \ n");

// Adgang til data medlemmer af stat struct
printf ("\ nFil st_uid% d \ n", sfile.st_uid);
printf ("\ nFil st_blksize% ld \ n", sfile.st_blksize);
printf ("\ nFil st_gid% d \ n", sfile.st_gid);
printf ("\ nFil st_blocks% ld \ n", sfile.st_blocks);
printf ("\ nFil st_størrelse% ld \ n", sfile.st_størrelse);
printf ("\ nFil st_nlink% u \ n", (usigneret int) sfile.st_nlink);
printf ("\ nFile Permissions User \ 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 ("\ nFiltilladelsesgruppe \ 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 ("\ nFiltilladelser Andet \ n");
printf ((sfile.st_mode & S_IROTH)? "r": "-");
printf ((sfile.st_mode & S_IWOTH)? "w": "-");
printf ((sfile.st_mode & S_IXOTH)? "x":"-");
printf ("\ n");

PRODUKTION:

I ovenstående C-kode har vi indtastet filnavnet, og hvis filen ikke findes, stoppes eksekveringen af ​​programmet. Dette demonstreres i følgende billede:

Hvis vores fil findes, kaldes funktionen sfile (n), hvor vi har sendt navnet på filen. Inde i funktionen har vi først og fremmest brugt Stat-systemopkald, hvis stat () returnerer -1, skal der e e enhver fejl, så en meddelelse udskrives, og eksekvering af programmet stoppes.

Derefter har vi i printf-sætningen brugt navnet på funktionen og prikskilleren til at få adgang til datamedlemmerne til stat struct.

Så for filtilstanden har vi adgang til st_modes makroer eller flag. Her bruges logisk og operator til at udskrive de respektive tilstande. Vi har kontrolleret for tilladelser til bruger, gruppe og andre for den angivne fil (filnavn indtastet af bruger).

Med dette kan du se, hvordan du bruger stat-systemopkaldet fra programmeringssprog C for at få oplysninger fra OS-kernen om filer.  Hvis du har et spørgsmål, er du velkommen til at fortælle os det via kommentarsektionen.

SuperTuxKart til Linux
SuperTuxKart er en fantastisk titel designet til at give dig Mario Kart-oplevelsen gratis på dit Linux-system. Det er ret udfordrende og sjovt at spil...
Kæmp om Wesnoth-vejledning
Slaget om Wesnoth er et af de mest populære open source-strategispil, som du kan spille på dette tidspunkt. Ikke kun har dette spil været under udvikl...
0 A.D. Vejledning
Ud af de mange strategispil derude, 0 A.D. formår at skille sig ud som en omfattende titel og et meget dybt, taktisk spil på trods af at det er open s...