Sistēmas zvani

Stat sistēmas zvana Linux apmācība

Stat sistēmas zvana Linux apmācība

Linux sistēmas zvani

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

Stat sistēmas izsaukums:

Stat sistēmas izsaukums ir sistēmas izsaukums 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. Inoda faila atribūtus pamatā atgriež funkcija Stat (). Inode satur faila metadatus. Inode satur: faila veidu, faila lielumu, kad failam tika piekļūts (modificēts, dzēsts), tas 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 stat () sistēmas izsaukumam, un tas ir faila indeksa numurs, kas tiek saglabāts inode tabulā. Ikreiz, kad izveidojat failu, šim failam tiek izveidots inoda numurs. Izmantojot stat sistēmas izsaukumu, 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 faila statusa iegūšanai. C stat sistēmas izsaukuma sintakse katrai operētājsistēmai var nebūt vienāda. Linux sistēmā sistēmas izsaukuma sintakse ir šāda:

int stat (const char * ceļš, struct stat * buf)

Funkcijas atgriešanās tips int, Ja funkcija ir veiksmīgi izpildīta, 0 tiek atgriezta, ja ir kādas kļūdas, -1 tiks atgriezta.

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

Tad funkcijā mums ir a 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 ievadīts kā parametrets un aizpildīts zvana izpildes laikā un ko lietotājs var nolasīt pēc zvana.

Stat struktūra:

Stat struktūra, kas definēta galvenes failā ir šādi lauki:

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

Apraksts:

  1. st_dev: Tas ir tās ierīces ID, kurā pašlaik atrodas mūsu fails.
  2. st_rdev: Šajā laukā ir aprakstīts, ka konkrēts fails apzīmē noteiktu ierīci.
  3. st_ino: Tas ir faila inoda 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: Tas ir pēdējais vai pēdējais laiks, kad tika piekļūts failam.
  6. st_ctime: Tas ir pēdējais laiks, kad tika mainīts faila statuss vai atļaujas.
  7. st_mtime: Šis ir pēdējais laiks, kad fails tika modificēts.
  8. st_blksize: Šis lauks norāda vēlamo I / O failu sistēmas bloka lielumu, kas katrā failā var atšķirties.
  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 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 Socket faila konstante 0140000
S_IFLINK Simboliskas saites faila konstante 0120000
S_IFREG Faila konstante parastam failam 0100000
S_IFBLK Bloka faila faila konstante 0060000
S_IFDIR Faila konstante direktorija failam 0040000
S_IFCHR Faila konstante rakstzīmju failam 0020000
S_IFIFO Faila konstante ir pieci 0010000
S_ISUID Iestatiet User ID bitu 0004000
S_ISGID Iestatiet grupas ID bitu 0002000
S_ISVTX Lipīgs uzgalis, kas norāda koplietojamo tekstu 0001000
S_IRWXU Īpašnieka atļaujas (lasīšana, rakstīšana, izpilde) 00700
S_IRUSR Lasīt īpašnieka atļaujas 00400
S_IWUSR Rakstīšanas atļaujas īpašniekam 00200
S_IXUSR Izpildiet īpašnieka atļaujas 00100
S_IRWXG Grupas atļaujas (lasīšana, rakstīšana, izpilde) 00070
S_IRGRP Lasīt grupas atļaujas 00040
S_IWGRP Rakstīšanas 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 Rakstīšanas atļaujas citiem 00002
S_IXOTH Izpildiet atļaujas citiem 00001

Kā izmantot Stat sistēmas izsaukumu:

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

1. PIEMĒRS:

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

KODS:

# iekļaut
# iekļaut
int main ()

// rādītājs uz stat struktūru
struct stat sfile;
// stat sistēmas izsaukums
stat ("stat.c ", & sfile);
// piekļuve st_mode (stat struct datu loceklis)
printf ("st_mode =% o", sfile.st_mode);
atgriešanās 0;

Programmas apkopošana un palaišana atgriežas šādi:

Šajā kodā mēs esam nodevuši faila nosaukumu stat sistēmas izsaukumā un pēc tam rādītāju uz stat struct, kas ir sfile. Pēc tam stat stat rādītājs 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 izsaukumu. Galvenes fails ir standarta ievades / izvades bibliotēkas fails, lai jūs savā 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 izsaukumu:

KODS:

# iekļaut
# iekļaut
# iekļaut
# iekļaut
void sfile (char const faila nosaukums []);
int main ()
ssize_t lasīt;
char * buferis = 0;
izmērs_t buf_izmērs = 0;
printf ("Ievadiet pārbaudāmā faila nosaukumu: \ n");
lasīt = getline (& buferis, & buf_size, stdin);
ja (lasīt <=0 )
printf ("getline neizdevās \ n");
izeja (1);

ja (buferis [lasīt-1] == '\ n')
buferis [lasīt-1] = 0;

int s = atvērts (buferis, O_RDONLY);
ja (s == - 1)
printf ("Fails nepastāv \ n");
izeja (1);

cits
sfile (buferis);

bezmaksas (buferis);
atgriešanās 0;

void sfile (char const faila nosaukums [])
struct stat sfile;
ja (stat (faila nosaukums, & sfile) == - 1)
printf ("Radās kļūda \ n");

// Piekļuve stat struct 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)? "w": "-");
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)? "w": "-");
printf ((sfile.st_mode & S_IXGRP)? "x": "-");
printf ("\ n");
printf ("\ nFailu atļaujas cits \ n");
printf ((sfile.st_mode & S_IROTH)? "r": "-");
printf ((sfile.st_mode & S_IWOTH)? "w": "-");
printf ((sfile.st_mode & S_IXOTH)? "x": "-");
printf ("\ n");

REZULTĀTS:

Iepriekš minētajā C kodā mēs esam ievadījuši faila nosaukumu un, ja faila nav, 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 izmantojām 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ā esam izmantojuši funkcijas nosaukumu un punktu atdalītāju, lai piekļūtu datu dalībniekiem stat strukt.

Pēc tam faila režīmam mēs esam piekļuvuši st_mode makro vai karodziņiem. Šeit loģiskais un operators tiek izmantots, lai drukātu attiecīgos režīmus. Mēs esam pārbaudījuši lietotāja, grupas un citu lietotāju atļaujas norādītajam failam (lietotāja ievadītajam faila nosaukumam).

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

AppyMouse ekrāna skārienpaliktnis un peles rādītājs Windows planšetdatoriem
Planšetdatoru lietotājiem bieži pietrūkst peles rādītāja, it īpaši, ja viņi parasti lieto klēpjdatorus. Skārienekrāna viedtālruņiem un planšetdatoriem...
Vidējā peles poga nedarbojas sistēmā Windows 10
The peles vidējā poga palīdz jums ritināt garas tīmekļa lapas un ekrānus ar lielu datu daudzumu. Ja tas apstājas, jūs galu galā izmantosiet tastatūru,...
Kā nomainīt peles kreiso un labo pogu operētājsistēmā Windows 10
Tas ir diezgan normāli, ka visas datora peles ierīces ir ergonomiski izstrādātas lietotājiem ar labo roku. Bet ir pieejamas peles ierīces, kas ir īpaš...