
statlínea de comandosstat()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:
st_dev– identificador del dispositivo que contiene el archivost_ino– número de inodost_mode– un campo de bits que contiene los modos de acceso a archivos y el tipo de archivo especial ; véase permisos de Unix.st_nlink– recuento de referencias de enlaces durosst_uid– identificador de usuario del propietariost_gid– identificador de grupo del propietariost_rdev– identificador del dispositivo (si se trata de un archivo especial )st_size– tamaño total del archivo , en bytesst_atime– hora del último accesost_mtime– hora de la última modificaciónst_ctime– hora del último cambio de estadost_blksize– tamaño de bloque preferido para E/S del sistema de archivos, que puede depender tanto del sistema como del tipo de sistema de archivos [ 4 ]st_blocks– número de bloques asignados en múltiplos deDEV_BSIZE(normalmente 512 bytes).
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
- ↑ McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
- ↑ "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 .
- 1 2 Stevens y Rago 2013 , pág. 94.
- ↑ "<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.
Enlaces externos
- 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 .
- Biblioteca C POSIX
- POSIX
- Software relacionado con el sistema de archivos Unix
- llamadas al sistema