Sistema de estadísticas Tutorial de llamadas de Linux

Sistema de estadísticas Tutorial de llamadas de Linux

Llamadas del sistema Linux

Las llamadas del sistema proporcionadas por el núcleo de Linux están expuestas en el lenguaje de programación C a través de GLIBC. Cuando se usa una llamada del sistema, se está comunicando al sistema operativo y, al devolver, el sistema operativo se comunica a través de los parámetros que se devuelven a las funciones de llamadas del sistema (valores de retorno).

Llamada del sistema de estadísticas:

STAT System Call es una llamada del sistema en Linux para verificar el estado de un archivo, como para verificar cuándo se accedió al archivo. La llamada del sistema stat () realmente devuelve los atributos del archivo. Los atributos de archivo de un inodo se devuelven básicamente por la función stat (). Un inodo contiene los metadatos del archivo. Un inodo contiene: el tipo de archivo, el tamaño del archivo, cuando se accedió al archivo (modificado, eliminado) que es sellos de tiempo, y la ruta del archivo, el ID de usuario y la ID de grupo, los enlaces del archivo y dirección física del contenido del archivo.

Podemos decir que inode contiene todos los datos requeridos para la llamada del sistema STAT () y es el número de índice para el archivo que se guarda en la tabla de inodo. Cada vez que crea un archivo que se crea un número de inodo para ese archivo. Usando la llamada del sistema STAT, las tablas del sistema se pueden ver.

Sintaxis de la llamada del sistema C:

Para usar la llamada del sistema STAT en el lenguaje de programación C, debe incluir el siguiente archivo de encabezado:

#incluir

STAT se usa para obtener el estado de un archivo. La sintaxis de la llamada del sistema de estadísticas C puede no ser la misma para cada sistema operativo. En Linux, la sintaxis para la llamada del sistema STAT es la siguiente:

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

El tipo de retorno de la función en int, si la función se ejecuta correctamente, se devuelve 0 si hay algún error, -1 se devolverá.

Aquí Const char *ruta Especifica el nombre del archivo. Si la ruta del archivo es un enlace simbólico, entonces debe especificar el enlace en lugar del nombre del archivo.

Luego, en la función tenemos una estructura de estadísticas en la que se almacenan los datos o información sobre el archivo que usa un puntero llamado bufón, que se pasa como paramtéter y se llena durante la ejecución de la llamada y el usuario legible después de la llamada.

Estructura de estadísticas:

La estructura de estadísticas que se define en el archivo de encabezado contiene los siguientes campos:

estadística de estructura

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

Descripción:

  1. ST_DEV: Es la identificación del dispositivo en el que tenemos nuestro archivo que reside actualmente.
  2. ST_RDEV: Este campo describe que un archivo en particular representa un dispositivo en particular.
  3. ST_INO: Es el número de inodo o el número de serie del archivo. Ya que es un número de índice, por lo que debería ser único para todos los archivos
  4. ST_SIZE: st_size es el tamaño del archivo en bytes.
  5. st_atime: Es la última vez o la hora reciente en la que se accedió el archivo.
  6. ST_CTIME: Es el momento reciente en el que se cambiaron el estado o los permisos del archivo.
  7. st_mtime: Es el momento reciente en el que se modificó el archivo.
  8. st_blksize: Este campo proporciona el tamaño de bloque preferido para el sistema de archivos de E/S que puede variar de un archivo a otro.
  9. ST_BLOCKS: Este campo dice el número total de bloques en múltiplos de 512 bytes.
  10. st_nlink: Este campo dice el número total de enlaces duros.
  11. ST_UID: Este campo indica la ID de usuario.
  12. ST_GID: Este campo indica la identificación del grupo.
  13. ST_MODE: Indica los permisos en el archivo, indica los modos en un archivo. Los siguientes son los indicadores que deben definirse para el campo ST_Mode:
Banderas Descripción Valor de bandera
S_ifmt Un bitmask utilizado para obtener el valor de modo de un archivo 0170000
S_ifsock Un archivo constante de socket 0140000
S_iflink Un archivo constante de enlace simbólico 0120000
S_ifreg Archivo constante para el archivo regular 0100000
S_ifblk Archivo constante para el archivo de bloque 0060000
S_ifdir Archivo constante para el archivo de directorio 0040000
S_ifchr Archivo constante para el archivo de caracteres 0020000
S_ififo Un archivo constante de FIFO 0010000
S_isuid Establecer bit de identificación de usuario 0004000
S_isgid Establecer bit de identificación de grupo 0002000
S_isvtx Bit pegajoso que indica texto compartido 0001000
S_irwxu Permisos del propietario (leer, escribir, ejecutar) 00700
S_irusr Leer permisos para el propietario 00400
S_iwusr Permisos de escritura para el propietario 00200
S_ixusr Ejecutar permisos para el propietario 00100
S_irwxg Permisos grupales (leer, escribir, ejecutar) 00070
S_IRGRP Leer permisos para el grupo 00040
S_iwgrp Permisos de escritura para el grupo 00020
S_ixgrp Ejecutar permisos para el grupo 00010
S_irwxo Permisos para otros (leer, escribir, ejecutar) 00007
S_iroth Leer permisos para otros 00004
S_iwoth Permisos de escritura para otros 00002
S_ixoth Ejecutar permisos para otros 00001

Cómo usar la llamada del sistema STAT:

El siguiente ejemplo muestra cómo usar la llamada del sistema STAT en el lenguaje de programación C en Linux, Ubuntu.

EJEMPLO 1:

En el siguiente código vamos a encontrar el modo de un archivo:

CÓDIGO:

#incluir
#incluir
int main ()

// puntero a la estructura de stat
stat stat sfile;
// Llamada del sistema de estadísticas
STAT ("STAT.c ", & sfile);
// Acceso a ST_Mode (miembro de datos de STAT Struct)
printf ("st_mode = %o", sfile.st_mode);
regresar 0;

Compilar y ejecutar el programa devuelve como se muestra a continuación:

En este código, hemos pasado el nombre del archivo en la llamada del sistema STAT y luego el puntero a la estructura de stat que es sfile. El puntero a STAT struct se usa para acceder a ST_MODE que muestra el modo del archivo usando la instrucción PRINTF.

Se utiliza el archivo de encabezado para que pueda usar la llamada del sistema STAT. El archivo de encabezado es el archivo de biblioteca de entrada/salida estándar para que pueda usar printf o scanf en su código C.

Ejemplo 2:

En el siguiente código, obtendremos información sobre el archivo utilizando la llamada del sistema STAT:

CÓDIGO:

#incluir
#incluir
#incluir
#incluir
void sfile (char const fileName []);
int main ()
ssize_t leer;
char* buffer = 0;
size_t buf_size = 0;
printf ("Ingrese el nombre de un archivo para verificar: \ n");
read = getLine (& buffer, & buf_size, stdin);
Si (lea <=0 )
printf ("GetLine fallado \ n");
salida (1);

if (buffer [read-1] == '\ n')
Buffer [Read-1] = 0;

int s = abre (búfer, o_rdonly);
if (s ==-1)
printf ("El archivo no existe \ n");
salida (1);

demás
sfile (búfer);

gratis (búfer);
regresar 0;

void sfile (char const fileName [])
stat stat sfile;
if (stat (nombre de archivo, & sfile) ==-1)
printf ("Ocurrió el error \ n");

// Acceso a los miembros de datos de 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 ("\ nfile st_blocks %ld \ n", sfile.st_blocks);
printf ("\ nfile st_size %ld \ n", sfile.st_size);
printf ("\ nfile st_nlink %u \ n", (unsigned int) sfile.st_nlink);
printf ("\ nfile permisos user \ n");
printf ((sfile.ST_MODE y S_IRUSR)? "r": "-");
printf ((sfile.ST_MODE y S_IWUSR)? "W": "-");
printf ((sfile.st_mode y s_ixusr)? "X":"-");
printf ("\ n");
printf ("\ nfile Permissions Group \ n");
printf ((sfile.ST_MODE y S_IRGRP)? "r": "-");
printf ((sfile.ST_MODE y S_IWGRP)? "W": "-");
printf ((sfile.ST_MODE y S_IXGRP)? "X":"-");
printf ("\ n");
printf ("\ nfile permisos otros \ n");
printf ((sfile.st_mode y s_iroth)? "r": "-");
printf ((sfile.st_mode y s_iwoth)? "W": "-");
printf ((sfile.st_mode y s_ixoth)? "X":"-");
printf ("\ n");

PRODUCCIÓN:

En el código C anterior, hemos ingresado el nombre del archivo y si el archivo no existe, la ejecución del programa se detendrá. Esto se demuestra en la siguiente imagen:

Si nuestro archivo existe, se llamará a la función sfile (n) en la que hemos pasado el nombre del archivo. Dentro de la función, en primer lugar, hemos utilizado la llamada del sistema STAT, si STAT () devuelve -1, entonces debe ser cualquier error para que se imprima un mensaje y se detenga la ejecución del programa.

Luego, en la declaración printf, hemos utilizado el nombre de la función y el separador de puntos para acceder a los miembros de los datos de estadística.

Luego, para el modo de archivo, hemos accedido a las macros o banderas de ST_MODE. Aquí se utiliza lógico y operador para imprimir los modos respectivos. Hemos verificado los permisos para el usuario, el grupo y otros para el archivo especificado (nombre del archivo ingresado por el usuario).

Con esto, puede ver cómo usar la llamada del sistema STAT desde el lenguaje de programación C para obtener información del kernel del sistema operativo sobre archivos. Si tiene una pregunta, siéntase gratis Cuéntanos a través de la sección de comentarios.