Llamadas al sistema del sistema de ficheros en POSIX Sistemas Operativos Ingeniería en Informática Área de Arquitectura de Computadores Universidad Carlos.

1 Llamadas al sistema del sistema de ficheros en POSIX Si...
Author: Bernardo Blázquez Toledo
0 downloads 0 Views

1 Llamadas al sistema del sistema de ficheros en POSIX Sistemas Operativos Ingeniería en Informática Área de Arquitectura de Computadores Universidad Carlos III de Madrid

2 Archivos Apertura de archivo  open Apertura de archivo  open Devuelve un descriptor o error (valor < 0) Devuelve un descriptor o error (valor < 0) Cerrar archivo  close Cerrar archivo  close Leer datos  read Leer datos  read read(descriptor, buffer, tamaño) read(descriptor, buffer, tamaño) Escribir datos  write Escribir datos  write write(descriptor, buffer, tamaño) write(descriptor, buffer, tamaño) Desplazar puntero acceso  lseek Desplazar puntero acceso  lseek lseek(descriptor, desplazamiento, desde) lseek(descriptor, desplazamiento, desde)

3 Directorios - #include Directorios - #include Abrir directorio  opendir(nombre_dir) Abrir directorio  opendir(nombre_dir) Devuelve un puntero a un struct DIR Devuelve un puntero a un struct DIR Cerrar directorio  closedir(struct DIR*) Cerrar directorio  closedir(struct DIR*) Recorrido de los elementos de un directorio: Recorrido de los elementos de un directorio: Elementos  struct dirent Elementos  struct dirent Leer siguiente entrada  readdir(struct DIR*) Leer siguiente entrada  readdir(struct DIR*) Si es la última devuelve NULL Si es la última devuelve NULL Volver a obtener primer elemento  rwinddir Volver a obtener primer elemento  rwinddir Obtener número de elemento actual  telldir Obtener número de elemento actual  telldir Desplazarse a un elemento  seekdir Desplazarse a un elemento  seekdir

4 struct dirent struct dirent { long d_ino; /* número i-nodo */ long d_ino; /* número i-nodo */ off_t d_off; /* despl. al siguiente dirent */ off_t d_off; /* despl. al siguiente dirent */ unsigned short d_reclen; /* long. de este registro */ unsigned short d_reclen; /* long. de este registro */ unsigned char d_type; /* tipo de fichero*/ unsigned char d_type; /* tipo de fichero*/ char d_name[256]; /* nombre del fichero */ char d_name[256]; /* nombre del fichero */};

5 Información de un archivo o directorio: stat - #include Información de un archivo o directorio: stat - #include La llamada al sistema stat permite obtener información de un archivo o directorio. La llamada al sistema stat permite obtener información de un archivo o directorio. stat(const char *path, struct stat *buf) stat(const char *path, struct stat *buf) Se debe pasar un puntero a una estructura stat existente, la función stat se encarga de rellenar los campos de la estructura para el archivo o directorio indicado. Se debe pasar un puntero a una estructura stat existente, la función stat se encarga de rellenar los campos de la estructura para el archivo o directorio indicado.

6 struct stat struct stat struct stat { dev_t st_dev; /* dispositivo */ dev_t st_dev; /* dispositivo */ ino_t st_ino; /* inodo */ ino_t st_ino; /* inodo */ mode_t st_mode; /* protección */ mode_t st_mode; /* protección */ nlink_t st_nlink; /* número de enlaces físicos */ nlink_t st_nlink; /* número de enlaces físicos */ uid_t st_uid; /* ID del usuario propietario */ uid_t st_uid; /* ID del usuario propietario */ gid_t st_gid; /* ID del grupo propietario */ gid_t st_gid; /* ID del grupo propietario */ dev_t st_rdev; /* tipo dispositivo (si es dev_t st_rdev; /* tipo dispositivo (si es dispositivo inodo) */ dispositivo inodo) */ off_t st_size; /* tamaño total, en bytes */ off_t st_size; /* tamaño total, en bytes */ unsigned long st_blksize; /* tamaño de bloque para el unsigned long st_blksize; /* tamaño de bloque para el sistema de ficheros de E/S */ sistema de ficheros de E/S */ unsigned long st_blocks; /* número de bloques asignados*/ unsigned long st_blocks; /* número de bloques asignados*/ time_t st_atime; /* hora último acceso */ time_t st_atime; /* hora último acceso */ time_t st_mtime; /* hora última modificación */ time_t st_mtime; /* hora última modificación */ time_t st_ctime; /* hora último cambio */ time_t st_ctime; /* hora último cambio */ }; };

7 stat.st_mode Sobre el campo st_mode se pueden utilizar varias macros: Sobre el campo st_mode se pueden utilizar varias macros: S_ISLNK(m) es un enlace simbólico? S_ISLNK(m) es un enlace simbólico? S_ISREG(m) un fichero regular? S_ISREG(m) un fichero regular? S_ISDIR(m) un directorio? S_ISDIR(m) un directorio? S_ISCHR(m) un dispositivo de caracteres? S_ISCHR(m) un dispositivo de caracteres? S_ISBLK(m) un dispositivo de bloques? S_ISBLK(m) un dispositivo de bloques? S_ISFIFO(m) una tubería nombrada (fifo)? S_ISFIFO(m) una tubería nombrada (fifo)? S_ISSOCK(m) un enchufe (socket)? S_ISSOCK(m) un enchufe (socket)?