Stat System Tumawag sa Tutorial sa Linux

Stat System Call Linux Tutorial



Ang mga tawag sa system na ibinigay ng linux kernel ay nakalantad sa wika ng C programa sa pamamagitan ng glibc. Kapag ginamit ang isang tawag sa system, nakikipag-usap ka sa OS at sa pagbabalik ay nakikipag-usap sa iyo ang OS sa pamamagitan ng mga parameter na ibinalik sa mga pag-andar ng tawag sa system (mga halaga ng pagbabalik).

Tawag sa Sistema ng Stat:

Ang tawag ng system stat ay isang tawag sa system sa Linux upang suriin ang katayuan ng isang file tulad ng upang suriin kung kailan na-access ang file. Ang stat () na tawag sa system ay talagang nagbabalik ng mga katangian ng file. Ang mga katangian ng file ng isang inode ay karaniwang ibinalik ng pagpapaandar ng Stat (). Naglalaman ang isang inode ng metadata ng file. Naglalaman ang isang inode: ang uri ng file, ang laki ng file, kapag na-access ang file (binago, tinanggal) na mga time stamp, at ang landas ng file, ang user ID at ang group ID, mga link ng file , at pisikal na address ng nilalaman ng file.







Maaari naming sabihin na ang inode ay naglalaman ng lahat ng data na kinakailangan para sa stat () na tawag sa system at ito ang numero ng index para sa file na nai-save sa talahanayan ng inode. Tuwing lumikha ka ng isang file isang numero ng inode para sa file na iyon ay nilikha. Ang paggamit ng stat system na tawagan ang mga talahanayan ng system ay maaaring matingnan.



Ang tawag sa system ng C Stat ng Syntax:

Upang magamit ang tawag sa system ng stat sa wika ng C na programa, kailangan mong isama ang sumusunod na header file:



# isama

Ginagamit ang stat upang makuha ang katayuan ng isang file. Ang syntax ng C stat system na tawag ay maaaring hindi pareho para sa bawat operating system. Sa Linux ang syntax para sa tawag sa system ng stat ay ang mga sumusunod:





intestado(Const char *landas, istrukturaestado*tagabili)

Ang uri ng pagbabalik ng pagpapaandar sa int, kung ang pagpapaandar ay matagumpay na naisakatuparan, 0 ay ibabalik kung mayroong anumang mga error, -1 ay ibabalik.

Dito Const char * path tinutukoy ang pangalan ng file. Kung ang landas ng file ay isang simbolikong link sa gayon kailangan mong tukuyin ang link sa halip na pangalan ng file.



Pagkatapos sa pagpapaandar mayroon kaming isang istraktura ng stat kung saan ang data o impormasyon tungkol sa file ay nakaimbak na gumagamit ng isang pointer na pinangalanan tagabili, na kung saan ay naipasa bilang isang paramteter at napunan sa panahon ng pagpapatupad ng tawag at nababasa ng gumagamit pagkatapos ng tawag.

Istraktura ng stat:

Ang istraktura ng stat na tinukoy sa header file ay naglalaman ng mga sumusunod na patlang:

istrukturaestado
{
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;
istrukturatimspec st_atim;
istrukturatimspec st_mtim;
istrukturatimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Paglalarawan:

  1. st_dev: Ito ang ID ng aparato kung saan kasalukuyan kaming naninirahan sa aming file.
  2. st_rdev: Inilalarawan ng patlang na ito na ang isang partikular na file ay kumakatawan sa isang partikular na aparato.
  3. st_ino: Ito ang numero ng inode o ang serial number ng file. Dahil ito ay isang numero ng index kaya dapat itong maging natatangi para sa lahat ng mga file
  4. st_size: Ang st_size ay ang laki ng file sa mga byte.
  5. st_atime: Ito ang huling oras o ang kamakailang oras kung saan na-access ang file.
  6. st_ctime: Ito ang kamakailang oras kung saan binago ang katayuan o mga pahintulot ng file.
  7. st_mtime: Ito ang kamakailang oras kung saan nabago ang file.
  8. st_blksize: Ibinibigay ng patlang na ito ang ginustong laki ng pag-block para sa I / O file system na maaaring magkakaiba sa bawat file.
  9. st_blocks: Sinasabi ng patlang na ito ang kabuuang bilang ng mga bloke sa mga multiply ng 512 bytes.
  10. st_nlink: Sinasabi ng patlang na ito ang kabuuang bilang ng mga hard link.
  11. st_uid: Ipinapahiwatig ng patlang na ito ang user ID.
  12. st_gid: Isinasaad ng patlang na ito ang pangkat ng ID.
  13. st_mode: Ipinapahiwatig nito ang mga pahintulot sa file, sinasabi sa mga mode sa isang file. Ang mga sumusunod ay ang mga watawat na dapat tukuyin para sa st_mode field:
Mga Bandila Paglalarawan Halaga sa Bandila
S_IFMT Ginamit ang isang bitmask upang makakuha ng halaga ng mode ng isang file 0170000
S_IFSOCK Ang isang file pare-pareho ng socket 0140000
S_IFLINK Ang isang file na pare-pareho ng simbolikong link 0120000
S_IFREG Patuloy ang file para sa regular na file 0100000
S_IFBLK Patuloy ang file para sa block file 0060000
S_IFDIR Patuloy ang file para sa file ng direktoryo 0040000
S_IFCHR Patuloy ang file para sa file ng character 0020000
S_IFIFO Ang isang file na pare-pareho ng fifo 0010000
S_ISUID Itakda ang User ID ng kaunti 0004000
S_ISGID Itakda ang Group ID ng kaunti 0002000
S_ISVTX Malagkit na bit na nagpapahiwatig ng nakabahaging teksto 0001000
S_IRWXU Mga Pahintulot ng May-ari (basahin, isulat, ipatupad) 00700
S_IRUSR Basahin ang Mga Pahintulot para sa may-ari 00400
S_IWUSR Sumulat ng Mga Pahintulot para sa may-ari 00200
S_IXUSR Ipatupad ang Mga Pahintulot para sa may-ari 00100
S_IRWXG Mga Pahintulot sa Grupo (basahin, isulat, ipatupad) 00070
S_IRGRP Basahin ang Mga Pahintulot para sa pangkat 00040
S_IWGRP Sumulat ng Mga Pahintulot para sa pangkat 00020
S_IXGRP Ipatupad ang Mga Pahintulot para sa pangkat 00010
S_IRWXO Mga Pahintulot para sa iba (basahin, isulat, ipatupad) 00007
S_IROTH Basahin ang Mga Pahintulot para sa iba 00004
S_IWOTH Sumulat ng Mga Pahintulot para sa iba 00002
S_IXOTH Ipatupad ang Mga Pahintulot para sa iba 00001

Paano gamitin ang tawag sa system ng Stat:

Ipinapakita ng sumusunod na halimbawa kung paano gamitin ang stat system call sa C programming language sa Linux, Ubuntu.

HALIMBAWA 1:

Sa sumusunod na code hahanapin namin ang mode ng isang file:

CODE:

# isama
# isama
intpangunahing()
{
// pointer sa stat struct
istrukturasfile ng estado;

// stat system na tawag
estado('stat.c', &sfile);

// pag-access sa st_mode (kasapi ng data ng stat struct)
printf ('st_mode =% o',sfile.st_mode);
bumalik ka 0;
}

Ang pag-iipon at pagpapatakbo ng programa ay babalik sa ibaba:

Sa code na ito, naipasa namin ang pangalan ng file sa stat system na tawag at pagkatapos ang pointer sa stat struct na kung saan ay sfile. Ang pointer sa stat struct ay ginagamit upang ma-access ang st_mode na nagpapakita ng mode ng file gamit ang printf statement.

Ginamit ang header file upang maaari mong gamitin ang stat system na tawag. Ang header file ay ang karaniwang input / output library file upang maaari mong gamitin ang printf o scanf sa iyong C code.

HALIMBAWA 2:

Sa sumusunod na code makakakuha kami ng impormasyon tungkol sa file gamit ang stat system na tawag:

CODE:

# isama
# isama
# isama
# isama

walang bisasfile(char Constfilename[]);

intpangunahing(){
nabasa na;
char*buffer= 0;
size_tbuf_size= 0;

printf ('Ipasok ang pangalan ng isang file upang suriin: n');
basahin=getline(&buffer, &buf_size,si stdin);

kung (basahin<=0 ){
printf (Nabigo ang getline n');
labasan (1);
}

kung (buffer[basahin-1] == ' n'){
buffer[basahin-1] = 0;
}

ints=buksan(buffer,O_RDONLY);
kung(s== -1){
printf ('Walang file n');
labasan (1);
}
iba pa{
sfile(buffer);
}
libre (buffer);
bumalik ka 0;
}

walang bisasfile(char Constfilename[]){

istrukturasfile ng estado;

kung(estado(filename, &sfile)== -1){
printf ('Error Naganap n');
}

// Pag-access sa mga kasapi ng data ng stat struct
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 (' nMag-file ng st_blocks% ld n',sfile.st_blocks);
printf (' nFile st_size% ld n',sfile.st_size);
printf (' nFile st_nlink% u n',(hindi pinirmahan int)sfile.st_nlink);
printf (' nGumagamit ng Mga Pahintulot ng File n');
printf ((sfile.st_mode &S_IRUSR)? 'r':'-');
printf ((sfile.st_mode &S_IWUSR)? 'sa':'-');
printf ((sfile.st_mode &S_IXUSR)? 'x':'-');
printf (' n');
printf (' nPangkat ng Mga Pahintulot ng File n');
printf ((sfile.st_mode &S_IRGRP)? 'r':'-');
printf ((sfile.st_mode &S_IWGRP)? 'sa':'-');
printf ((sfile.st_mode &S_IXGRP)? 'x':'-');
printf (' n');
printf (' nMga Pahintulot ng File Iba pa n');
printf ((sfile.st_mode &S_IROTH)? 'r':'-');
printf ((sfile.st_mode &S_IWOTH)? 'sa':'-');
printf ((sfile.st_mode &S_IXOTH)? 'x':'-');
printf (' n');
}

OUTPUT:

Sa itaas na C code, ipinasok namin ang pangalan ng file at kung ang file ay hindi mayroon pagkatapos ay titigil ang pagpapatupad ng programa. Ipinakita ito sa sumusunod na imahe:

Kung mayroon ang aming file, ang function sfile (n) ay tatawagin kung saan namin naipasa ang pangalan ng file. Sa loob ng pagpapaandar, una sa lahat ginamit namin ang tawag sa system ng Stat, kung ang stat () ay nagbabalik -1 kung gayon dapat mayroong anumang error upang ang isang mensahe ay mai-print at ihinto ang pagpapatupad ng programa.

Pagkatapos sa pahayag na printf ginamit namin ang pangalan ng pag-andar at tuldok ng paghihiwalay upang ma-access ang mga kasapi ng data ng stat struct .

Pagkatapos para sa mode ng file na na-access namin ang mga macros o flag ng st_mode. Narito ang lohikal at operator ay ginagamit upang mai-print ang kani-kanilang mga mode. Sinuri namin para sa mga pahintulot para sa gumagamit, pangkat, at iba pa para sa tinukoy na file (pangalan ng file na ipinasok ng gumagamit).

Sa pamamagitan nito maaari mong makita kung paano gamitin ang stat system na tawag mula sa wika ng C programa upang makakuha ng impormasyon mula sa OS kernel tungkol sa mga file. Kung mayroon kang isang katanungan huwag mag-atubiling sabihin sa amin sa pamamagitan ng seksyon ng komento.