Atributos de archivos Unix /Linux y sus llamadas al sistema

  

TABLA 1. Obtenga los atributos del archivo (stat, fstat, lstat)

2. Tipo de archivo 2.1 Los tipos de archivo incluyen las siguientes macros de prueba de tipo de archivo 2.2 2.3 Ejemplos de prueba de tipo de archivo 3. Permisos de archivo 3.2 Pequeños detalles acerca de los permisos 3.3 Configuración de ID de usuario y configuración de ID de grupo 3.4 Permisos de archivo para llamadas al sistema 3.4.1 funciones umask 3.4.2 chmod y fchmod 3.4.3 chown fchown y lchown 4. Tiempo de archivo 4.1 función utime
El archivo tiene sus atributos, como el tipo, los permisos, la longitud, el estado, etc. Este artículo resumirá esto y conocerá las llamadas al sistema relacionadas.

1. Obtenga los atributos del archivo (stat, fstat, lstat)

Tres funciones stat pueden devolver información sobre los archivos.

[código] #include

int stat (const char * nombre de ruta, struct stat * buf); int fstat (int filedes, struct stat * buf); int lstat (const Char * nombre de ruta, estructura stat * buf); valor de retorno: éxito 0 falla -1 [/código]

La diferencia entre las tres funciones es que el primer parámetro es el nombre del archivo, el primer archivo de parámetros fstat Descriptor, lstat El primer parámetro es el nombre del archivo y devuelve la información del enlace simbólico, no la información del archivo de referencia del enlace simbólico.

El segundo parámetro, el puntero de estructura buf, es una estructura que debemos proporcionar. La forma básica: stat struct {st_mode mode_t; /* tipo de archivo y permisos de archivo * /st_ino ino_t; /* inode * /dev_t st_dev asociado con el archivo; /* guardar dispositivo archivo * /nlink_t st_nlink; /* la el número de enlaces duros en el fichero * /uid_t ST_UID; /* propietario del archivo UID * /gid_t st_gid; /* propietario del archivo GID * /off_t st_size; /* número de bytes del archivo, el archivo es válido ordinaria * /time_t st_atime; /* vez que el archivo se accede por primera vez * /time_t st_mtime; contenido /* el archivo de la última modificación de tiempo * /time_t st_ctime; permisos de archivos * /, el propietario, el grupo o el contenido fue modificada por última vez * /} use stat La función más probable es el comando `ls -l` para obtener toda la información sobre un archivo. A continuación, seguiremos el contenido de stat para comprender la información del atributo del archivo.

2. La estadística de estructura de tipo de archivo tiene información de tipo de archivo en st_mode (st_mode contiene tanto el tipo de archivo como los permisos de archivo).

2.1 Los tipos de archivos incluyen lo siguiente 1. Archivo normal /archivo normal: el tipo de archivo más largo. Los datos pueden ser de texto o binarios, sin diferencias para el kernel de Unix.

2. Archivo de directorio /archivo de directorio. Este archivo contiene los nombres de otros archivos y punteros a la información sobre estos archivos.

3. bloquee un archivo especial. Este tipo de archivo proporciona acceso en búfer al dispositivo. Cada acceso se realiza en unidades de longitud fija.

4. Archivo especial de caracteres Este tipo de archivo proporciona acceso ilimitado al dispositivo. La duración de cada visita es variable.

5. FIFO Este tipo de archivo se utiliza para la comunicación entre procesos y también se convierte en una canalización con nombre.

6. Socket /socket Este tipo de archivo se utiliza para la comunicación de red entre procesos.

7. Enlace simbólico /enlace simbólico Este tipo de archivo apunta a otro archivo.

2.2 Macros para pruebas de tipo de archivo Para un archivo, se pueden usar las siguientes macros para determinar el tipo de archivo. Los parámetros para estas macros son los miembros st_mode de stat.

S_ISREG () para comprobar si un S_ISDIR archivo normal () para comprobar si el archivo es un S_ISBLK directorio () para probar si un bloque S_ISCHR archivo especial () para probar si un personaje es un S_ISFIFO archivo especial () para comprobar si la tubería S_ISSOCK test () una toma de sub S_ISLNK () es una prueba de si el archivo de enlace

2.3 prueba de tipos de archivo de ejemplo [code] nombre del archivo: file_type.c #include #include #include #include

int main (int argc , char * argv [])

{int ret; int i; struct stat stat_buf; char * p_file_type;

for (i = 1; i < argc; i ++) {if ( (ret = lstat (argv [i], &stat_buf)) == -1) {fprintf (stderr, "% s — — >! lstat error \\ n ", argv [i]); continuar; } if (S_ISREG (stat_buf.st_mode))

p_file_type = " normal "; else if (S_ISDIR (stat_buf.st_mode))

p_file_type = " dir "; else if (S_ISCHR (stat_buf.st_mode))

p_file_type = " " carácter especial;; else if (S_ISBLK (stat_buf.st_mode))

p _file_type = " bloque especial "; else if (S_ISLNK (stat_buf.st_mode))

p_file_type = " enlace simbólico "; else if (S_ISFIFO (stat_buf.st_mode))

p_file_type = " fifo "; else if (S_ISSOCK (stat_buf.st_mode))

p_file_type = " socket "; otro p_file_type = " desconocido "; printf ("% s — — >% s \\ n ", argv [i], p_file_type);}

return 0;}

[/code] prueba [code] [prueba @ test stat_code] $ ./file_type /dev /initctl /etc /passwd /dev /sda /dev /tty /dev /log /dev /cdrom /dev /initctl — — > fifo /etc /passwd — — > Regular /dev /sda — — > bloque especial /dev /tty y mdash; — > carácter especial /dev /log — — > socket /dev /cdrom y mdash; — > enlace simbólico [prueba @ test stat_code] $ [/code ]


Copyright © Conocimiento de Windows All Rights Reserved