Articulo de referencia

stat (llamada al sistema)

stat línea de comandos stat() es una llamada al sistema Unix que consulta el sistema de archivos para obtener metadatos sobre un archivo (incluidos archivos especiales como dire...

statlínea de comandos

stat()es una llamada al sistema Unix que consulta el sistema de archivos para obtener metadatos sobre un archivo (incluidos archivos especiales como directorios ). Los metadatos contienen muchos campos, incluidos tipo , tamaño , propietario, permisos y marcas de tiempo .

Por ejemplo, el lscomando utiliza esta llamada al sistema para recuperar las marcas de tiempo:

  • mtime: fecha de última modificación ( ls -l)
  • atime: última vez que se accedió ( ls -lu)
  • ctime: cuándo cambió el último estado ( ls -lc)

stat()Apareció en la versión 1 de Unix . Es una de las pocas llamadas al sistema Unix originales que cambiaron, con la adición de permisos de grupo y un tamaño de archivo mayor en la versión 4. [ 1 ]

Desde al menos 2004, el comando de shell del mismo nombre ha estado disponible para Linux para exponer características de la llamada al sistema a través de una interfaz de línea de comandos . [ 2 ]stat

Funciones

El archivo de cabecera de la biblioteca C POSIX sys/stat.h , que se encuentra en sistemas operativos POSIX y otros sistemas operativos tipo Unix , declara funciones relacionadas.stat()

int stat ( const char * path , struct stat * buf ); int lstat ( const char * path , struct stat * buf ); int fstat ( int fieldesc , struct stat * buf );

Cada función acepta un puntero a un struct statbúfer que carga con información sobre el archivo especificado. Como es habitual en las llamadas al sistema, cada función devuelve 0 si se ejecuta correctamente o, en caso de fallo, establece errno para indicar la condición de fallo y devuelve -1.

Las funciones stat()y lstat()aceptan un argumento de ruta que especifica un archivo. Si la ruta identifica un enlace simbólico , stat()devuelve atributos del destino del enlace, mientras que lstat()devuelve atributos del enlace en sí. La fstat()función acepta un argumento de descriptor de archivo en lugar de una ruta y devuelve atributos del archivo que identifica.

La biblioteca se ha ampliado para admitir archivos grandes . Las funciones stat64()cargan información en un búfer que admite tamaños lstat64()de 64 bits, lo que permite trabajar con archivos de 2 GiB o más (hasta 8 EiB). Cuando la macro se define como 64, las funciones de 64 bits están disponibles con sus nombres originales.fstat64()struct stat64  _FILE_OFFSET_BITS

Estructura de datos

La estructura de metadatos se define en el encabezado sys/stat.h . A continuación se muestran los campos base, pero una implementación puede incluir campos adicionales: [ 3 ]

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 timespec st_atim ; struct timespec st_mtim ; struct timespec st_ctim ; blksize_t st_blksize ; blkcnt_t st_blocks ; };

POSIX.1 no requiere los miembros st_rdev, st_blocksy st_blksize; estos campos se definen como parte de la opción XSI en la Especificación Única de Unix.

En versiones anteriores del estándar POSIX.1, los campos relacionados con el tiempo se definían como st_atime, st_mtimey st_ctime, y eran de tipo time_t. Desde la versión 2008 del estándar, estos campos se renombraron a st_atim, st_mtimy st_ctim, respectivamente, de tipo struct timespec, ya que esta estructura proporciona una unidad de tiempo de mayor resolución. Para mantener la compatibilidad, las implementaciones pueden definir los nombres antiguos en términos del tv_secmiembro de struct timespec. Por ejemplo, st_atimese puede definir como st_atim.tv_sec. [ 3 ]

Los campos incluyen:

Ejemplo

El siguiente programa en C informa sobre los metadatos de cada archivo pasado a través de la línea de comandos , utilizando stat() para consultar al sistema y obtener la información.

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/stat.h> #include <sys/types.h>int main ( int argc , char * argv []) { struct stat sb ;for ( int i = 1 ; i < argc ; i ++ ) { if ( stat ( argv [ i ], & sb ) == -1 ) { perror ( "stat falló" ); exit ( EXIT_FAILURE ); }printf ( "%s: \n " , argv [ i ]); printf ( " \t inode: %u \n " , sb . st_ino ); printf ( " \t perms: %o \n " , sb . st_mode & ( S_IRWXU | S_IRWXG | S_IRWXO )); printf ( " \t links: %d \n " , sb . st_nlink ); printf ( " \t size: %ld \n " , sb . st_size ); printf ( " \t atime: %s" , ctime ( & sb . st_atim . tv_sec )); printf ( " \t mtime: %s" , ctime ( & sb . st_mtim . tv_sec )); printf ( " \ t ctime: %s" , ctime ( & sb.st_ctim.tv_sec ) ) ; printf ( " \n " ) ; }devolver 0 ; }

Referencias

  1. McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  2. "tee, file, stat, find- correction - linuxchix.org - Mié 10 Mar 11:04:07 EST 2004 (archivado el 30 de abril de 2006)" . Archivado del original el 30 de abril de 2006. Recuperado el 30 de abril de 2006 .
  3. 1 2 Stevens y Rago 2013 , pág. 94.
  4. "<sys/stat.h>" . Especificaciones básicas de The Open Group, número 6 IEEE Std 1003.1, edición de 2004. The Open Group. 2004.
  • un tiempo y tiempo relativo
  • Documentación de IEEE Std 1003.1, 2004 para fstat(2) . Consultado el 7 de junio de 2012.
  • stat() en Perl
  • stat() en PHP
  • stat(2) Página man de Linux . Consultado el 7 de junio de 2012.
  • Stevens, W. Richard; Rago, Stephen A. (24 de mayo de 2013). Programación avanzada en el entorno UNIX (Tercera  ed.). Addison-Wesley Professional . ISBN 978-0321637734. Consultado el 27 de febrero de 2015 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Stat_(system_call)&oldid=1328130261 "