Tutorial de Stat System Call Linux

Stat System Call Linux Tutorial



Les trucades del sistema proporcionades pel nucli Linux estan exposades en el llenguatge de programació C mitjançant glibc. Quan s'utilitza una trucada al sistema, esteu comunicant-vos al SO i, de retorn, el SO us comunica a través dels paràmetres que es retornen a les funcions de trucada del sistema (valors de retorn).

Trucada del sistema estadístic:

La trucada de sistema Stat és una trucada de sistema a Linux per comprovar l'estat d'un fitxer, com per comprovar quan es va accedir al fitxer. La trucada al sistema stat () realment retorna atributs de fitxer. Els atributs de fitxer d’un inode són bàsicament retornats per la funció Stat (). Un inode conté les metadades del fitxer. Un inode conté: el tipus de fitxer, la mida del fitxer, quan es va accedir al fitxer (modificat, suprimit), és a dir, segells de temps, i la ruta del fitxer, l’identificador d’usuari i l’identificador de grup, enllaços del fitxer i l'adreça física del contingut del fitxer.







Podem dir que inode conté totes les dades necessàries per a la trucada del sistema stat () i és el número d’índex del fitxer que es desa a la taula d’inode. Sempre que creeu un fitxer, es crea un número d’inode per a aquest fitxer. Mitjançant la trucada al sistema stat es poden veure les taules del sistema.



Sintaxi de la trucada al sistema C Stat:

Per utilitzar la trucada del sistema stat en llenguatge de programació C, heu d'incloure el fitxer de capçalera següent:



#incloure

Stat s’utilitza per obtenir l’estat d’un fitxer. La sintaxi de la trucada al sistema C stat pot no ser la mateixa per a tots els sistemes operatius. A Linux, la sintaxi de la trucada al sistema stat és la següent:





intestat(const char *Camí, estructestat*buf)

El tipus de retorn de la funció en int, si la funció s'executa correctament, es retorna 0 si hi ha errors, es retornarà -1.

Aquí const char * camí especifica el nom del fitxer. Si el camí del fitxer és un enllaç simbòlic, heu d'especificar l'enllaç en lloc del nom del fitxer.



A continuació, a la funció tenim una estructura estadística en què s’emmagatzemen les dades o la informació sobre el fitxer que utilitza un punter anomenat buf, que es transmet com a paràmetre i s'omple durant l'execució de la trucada i es pot llegir per l'usuari després de la trucada.

Estructura estadística:

L'estructura estadística que es defineix al fitxer de capçalera conté els camps següents:

estructestat
{
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;
desactivat_tmida_st;
estructtimspec st_atim;
estructtimspec st_mtim;
estructtimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Descripció:

  1. st_dev: És l'identificador del dispositiu en què residim actualment el nostre fitxer.
  2. st_rdev: Aquest camp descriu que un fitxer concret representa un dispositiu concret.
  3. st_ino: És el número d'inode o el número de sèrie del fitxer. Com que és un número d'índex, hauria de ser únic per a tots els fitxers
  4. mida_st: st_size és la mida del fitxer en bytes.
  5. st_atime: És l'última vegada o l'última vegada que es va accedir al fitxer.
  6. st_ctime: És el moment recent en què es va canviar l'estat o els permisos del fitxer.
  7. st_mtime: És el moment recent en què es va modificar el fitxer.
  8. st_blksize: Aquest camp proporciona la mida de bloc preferida per al sistema de fitxers d'E / S que pot variar d'un fitxer a un altre.
  9. st_blocks: Aquest camp indica el nombre total de blocs en múltiples de 512 bytes.
  10. st_nlink: Aquest camp indica el nombre total d'enllaços durs.
  11. st_uid: Aquest camp indica l'identificador d'usuari.
  12. st_gid: Aquest camp indica l'identificador del grup.
  13. st_mode: Indica els permisos del fitxer, indica els modes d’un fitxer. A continuació es mostren els indicadors que s’han de definir per al camp st_mode:
Banderes Descripció Valor de la marca
S_IFMT Una màscara de bits que s’utilitza per obtenir el valor de mode d’un fitxer 0170000
S_IFSOCK Una constant de fitxer de sòcol 0140000
S_IFLINK Una constant de fitxer d'enllaç simbòlic 0120000
S_IFREG Constant de fitxer per a fitxer normal 0100000
S_IFBLK Constant de fitxer per a fitxer de blocs 0060000
S_IFDIR Constant de fitxer per al fitxer de directori 0040000
S_IFCHR Constant de fitxer per al fitxer de caràcters 0020000
S_IFIFO Una constant de fitxer de fifo 0010000
S_ISUID Estableix el bit ID d'usuari 0004000
S_ISGID Estableix el bit d'identificació del grup 0002000
S_ISVTX Bit adhesiu que indica text compartit 0001000
S_IRWXU Permisos del propietari (llegir, escriure, executar) 00700
S_IRUSR Permisos de lectura per al propietari 00400
S_IWUSR Permisos d'escriptura per al propietari 00200
S_IXUSR Executeu permisos per al propietari 00100
S_IRWXG Permisos de grup (llegir, escriure, executar) 00070
S_IRGRP Permisos de lectura per al grup 00040
S_IWGRP Permisos d'escriptura per al grup 00020
S_IXGRP Executeu permisos per al grup 00010
S_IRWXO Permisos per a altres persones (llegir, escriure, executar) 00007
S_IROTH Permisos de lectura per a altres persones 00004
S_IWOTH Permisos d'escriptura per a altres persones 00002
S_IXOTH Executeu permisos per a altres persones 00001

Com s'utilitza la trucada al sistema Stat:

L'exemple següent mostra com utilitzar les trucades del sistema stat en llenguatge de programació C a Linux, Ubuntu.

EXEMPLE 1:

Al següent codi trobarem el mode d’un fitxer:

CODI:

#incloure
#incloure
intprincipal()
{
// punter a stat struct
estructstate sfile;

// trucada al sistema stat
estat('stat.c', &sfile);

// accedir a st_mode (membre de dades de l'estructura de l'estat)
printf ('st_mode =% o',sfile.st_mode);
tornar 0;
}

Compilar i executar el programa torna a ser el següent:

En aquest codi, hem passat el nom del fitxer a la crida al sistema stat i, a continuació, el punter a stat struct, que és sfile. El punter a stat struct s'utilitza per accedir a st_mode que mostra el mode del fitxer mitjançant la instrucció printf.

S'utilitza el fitxer de capçalera perquè pugueu utilitzar una trucada al sistema stat. El fitxer de capçalera és el fitxer de biblioteca d’entrada / sortida estàndard perquè pugueu utilitzar printf o scanf al vostre codi C.

EXEMPLE 2:

Al següent codi obtindrem informació sobre el fitxer mitjançant una trucada al sistema stat:

CODI:

#incloure
#incloure
#incloure
#incloure

buitsfile(char constnom de l'arxiu[]);

intprincipal(){
ssize_t llegit;
char*memòria intermèdia= 0;
mida_tmida_buf= 0;

printf ('Introduïu el nom d'un fitxer per comprovar: n');
llegir=getline(&memòria intermèdia, &mida_buf,stdin);

si (llegir<=0 ){
printf ('getline ha fallat n');
sortir (1);
}

si (memòria intermèdia[llegir-1] == ' n'){
memòria intermèdia[llegir-1] = 0;
}

ints=obert(memòria intermèdia,O_RDONLY);
si(s== -1){
printf ('El fitxer no existeix n');
sortir (1);
}
en cas contrari{
sfile(memòria intermèdia);
}
gratuït (memòria intermèdia);
tornar 0;
}

buitsfile(char constnom de l'arxiu[]){

estructstate sfile;

si(estat(nom de l'arxiu, &sfile)== -1){
printf ('S'ha produït un error n');
}

// Accedir a les dades membres de stat struct
printf (' nArxiu st_uid% d n',sfile.st_uid);
printf (' nFitxer st_blksize% ld n',sfile.st_blksize);
printf (' nArxiu st_gid% d n',sfile.st_gid);
printf (' nArxiu st_blocks% ld n',sfile.st_blocks);
printf (' nFitxer st_size% ld n',sfile.mida_st);
printf (' nArxiu st_nlink% u n',(sense signar int)sfile.st_nlink);
printf (' nUsuari de permisos de fitxers n');
printf ((sfile.st_mode &S_IRUSR)? 'r':'-');
printf ((sfile.st_mode &S_IWUSR)? 'dins':'-');
printf ((sfile.st_mode &S_IXUSR)? 'X':'-');
printf (' n');
printf (' nGrup de permisos de fitxers n');
printf ((sfile.st_mode &S_IRGRP)? 'r':'-');
printf ((sfile.st_mode &S_IWGRP)? 'dins':'-');
printf ((sfile.st_mode &S_IXGRP)? 'X':'-');
printf (' n');
printf (' nPermisos de fitxers Altres n');
printf ((sfile.st_mode &S_IROTH)? 'r':'-');
printf ((sfile.st_mode &S_IWOTH)? 'dins':'-');
printf ((sfile.st_mode &S_IXOTH)? 'X':'-');
printf (' n');
}

SORTIDA:

Al codi C anterior, hem introduït el nom del fitxer i, si el fitxer no existeix, s'aturarà l'execució del programa. Això es demostra a la imatge següent:

Si el nostre fitxer existeix, es cridarà la funció sfile (n) en la qual hem passat el nom del fitxer. Dins de la funció, primer hem utilitzat la crida al sistema Stat, si stat () retorna -1, llavors hi ha d’error, de manera que s’imprimirà un missatge i s’aturarà l’execució del programa.

A continuació, a la declaració printf hem utilitzat el nom de la funció i el separador de punts per accedir als membres de les dades de stat struct .

A continuació, per al mode de fitxer hem accedit a les macros o banderes de st_mode. Aquí s'utilitza lògic i operador per imprimir els modes respectius. Hem comprovat si hi ha permisos per a l'usuari, el grup i altres per al fitxer especificat (nom de fitxer introduït per l'usuari).

Amb això podeu veure com utilitzar la trucada del sistema stat des del llenguatge de programació C per obtenir informació del nucli del sistema operatiu sobre fitxers. Si teniu alguna pregunta, no dubteu a comunicar-nos-ho mitjançant la secció de comentaris.