#ifndef __SO_AFS_H #define __SO_AFS_H #include /****************************************** * Operaciones sobre el sistema de archivos *******************************************/ /** * Abre o crea un archivo según el modo de apertura. *---- * Parámetros: * inodeNum (IN-OUT): Número de I-Nodo. Es de entrada cuando es abrir y de salida cuando se crea. * flag (IN): Modo de apertura. * pid (IN): Número de pid del proceso que abre el archivo. * * Códigos de retorno: * Número de descriptor para hacer referencia posteriormente. * ERROR: Hubo un error. *---- **/ int SO_afs_open(u16 * inodeNum, enum so_fs_mode flag, u16 pid); /** * Leer datos de un archivo. *---- * Parámetros: * fd (IN): Número de descriptor del archivo. * buff (OUT): Donde se copia lo leído. * size (IN): Bytes a leer del archivo. * * Códigos de retorno: * Retorna la cantidad de bytes que pudo leer (máximo size). * ERROR: Hubo un error. *---- **/ int SO_afs_read(u16 fd, void * buff, u16 size); /** * Escribir datos a un archivo. *---- * Parámetros: * fd (IN): Número de descriptor del archivo. * buff (IN): Datos a escribir. * size (IN): Bytes a grabar. * * Códigos de retorno: * Retorna la cantidad de bytes que pudo grabar (máximo size). * ERROR: Hubo un error. *---- **/ int SO_afs_write(u16 fd, const void * buff, u16 size); /** * Cierra el archivo. *---- * Parámetros: * fd (IN): Número de descriptor del archivo. * * Códigos de retorno: * OK: Cerro el archivo correctamente. * ERROR: Hubo un error. *---- **/ int SO_afs_close(int fd); /*************************** * Operaciones sobre I-Nodos *****************************/ /** * Borra un I-Nodo. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo a borrar. * * Códigos de retorno: * OK: Pudo borrar el I-Nodo. * ERROR: Hubo un error. *---- **/ int SO_afs_rm(u16 inodeNum); /** * Posiciona el puntero del archivo. Utilizado para acceso directo. *---- * Parámetros: * fd (IN): Número de descriptor del archivo. * count (IN): Lugar del archivo donde posicionar el puntero. * * Códigos de retorno: * OK: Logró posicionar el puntero. * ERROR: Hubo un error. *---- **/ int SO_afs_lseek(int fd, u16 count); /** * Crea un enlace fuerte. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo para crear el enlace. * * Códigos de retorno: * OK: Logró crear el enlace. * ERROR: Hubo un error. *---- **/ int SO_afs_mkhardlink(u16 inodeNum); /****************************************** * Operaciones sobre el sistema de archivos *******************************************/ /** * Monta el volumen. Invoca a SO_vol_mount y se crea las estructuras necesarias para uso interno. *---- * Parámetros: * path (IN): ruta UNIX al volumen * * Códigos de retorno: * OK: Logró montar. * ERROR: Hubo un error. *---- **/ int SO_afs_mount(char * path); /** * Desmonta el volumen. Graba todo lo necesario y luego invoca la operación SO_blk_umount. *---- * Parámetros: * * Códigos de retorno: * OK: Desmontó correctamente. * ERROR: Hubo un error. *---- **/ int SO_afs_umount(void); #endif