#ifndef __SO_VOL_H #define __SO_VOL_H #include #include /********************************** * Operaciones sobre el superbloque ***********************************/ /** * Conseguir una COPIA del superbloque. *---- * Parámetros: * psb(OUT): Puntero a la estructura donde se copiará el superbloque. * * Códigos de retorno: * OK: Copio correctamente. * ERROR: Hubo un error. *---- **/ int SO_vol_getSuperBlock(struct so_sb * psb); /*************************** * Operaciones sobre I-Nodos *****************************/ /** * Conseguir una copia del I-Nodo inodeNum. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo. * inode (OUT): Estructura donde se copia el I-Nodo. * * Códigos de retorno: * OK: Copio correctamente. * ERROR: Hubo un error. *---- **/ int SO_vol_getInode(u16 inodeNum, struct so_inode * inode); /** * Setea el nuevo tamaño de un I-Nodo. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo. * size (IN): Tamaño nuevo. * * Códigos de retorno: * OK: Pudo setear el nuevo valor. * ERROR: Hubo un error. *---- **/ int SO_vol_setInodeSize(u16 inodeNum, u16 size); /** * Setea la cantidad de enlaces que tiene el I-Nodo. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo. * link (IN): Nueva cantidad de enlaces fuertes. * * Códigos de retorno: * OK: Pudo setear el nuevo valor. * ERROR: Hubo un error. *---- **/ int SO_vol_setInodeLink(u16 inodeNum, u16 link); /** * Consigue un I-Nodo libre y devuelve el número de I-Nodo. *---- * Parámetros: * inodeNum (OUT): Número de I-Nodo libre conseguido. * * Códigos de retorno: * OK: Pudo conseguir el I-Nodo. * ERROR: Hubo un error. *---- **/ int SO_vol_allocateInode(u16 * inodeNum); /** * Libera un I-Nodo. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo a liberar. * * Códigos de retorno: * OK: Pudo liberar el I-Nodo. * ERROR: Hubo un error. *---- **/ int SO_vol_deallocateInode(u16 inodeNum); /************************************ * Operaciones sobre bloques de datos *************************************/ /** * Lee una copia del bloque de datos número (blockNum) de un I-Nodo. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo. * blockNum (IN): Número de bloque de datos del I-Nodo (0..4) * block (OUT): Puntero a un bloque. * * Códigos de retorno: * OK: Se pudo leer el bloque de datos. * ERROR: Hubo un error. *---- **/ int SO_vol_bread(u16 inodeNum, u16 blockNum, void * block); /** * Graba el bloque de datos número (blockNum) de un I-Nodo. *---- * Parámetros: * inodeNum (IN): Número de I-Nodo. * blockNum (IN): Número de bloque de datos del I-Nodo (0..4) * block (IN): Estructura donde se copia el bloque. * * Códigos de retorno: * OK: Se grabó el bloque de datos. * ERROR: Hubo un error. *---- **/ int SO_vol_bwrite(u16 inodeNum, u16 blockNum, const void * block); /** * Consigue un bloque de datos libres para el I-Nodo (inodeNum). *---- * Parámetros: * inodeNum (IN): Número de I-Nodo. * * Códigos de retorno: * OK: Consiguió el bloque de datos. * ERROR: Hubo un error. *---- **/ int SO_vol_allocateBlock(u16 inodeNum); /** * Libera el último bloque de datos ocupado por el I-Nodo (inodeNum). *---- * Parámetros: * inodeNum (IN): Número de I-Nodo. * * Códigos de retorno: * OK: Liberó el bloque de datos. * ERROR: Hubo un error. *---- **/ int SO_vol_deallocateBlock(u16 inodeNum); /****************************************** * Operaciones sobre el sistema de archivos *******************************************/ /** * Monta el volumen. Invoca a SO_blk_mount y se trae una copia del superbloque, el vector de bits y la tabla de I-Nodos. *---- * Parámetros: * path (IN): ruta UNIX al volumen * * Códigos de retorno: * OK: Logró montar. * ERROR: Hubo un error. *---- **/ int SO_vol_mount(char * path); /** * Desmonta el volumen. Graba el superbloque, vector de bits y la tabla de I-Nodos. Luego invoca la operación SO_blk_umount. *---- * Parámetros: * * Códigos de retorno: * OK: Desmontó correctamente. * ERROR: Hubo un error. *---- **/ int SO_vol_umount(void); #endif