#ifndef __SFFISICO_H #define __SFFISICO_H /* */ /* SFFISICO.H */ /* ========== */ /* */ /* Interfaz con el Sistema de Ficheros Físico */ /* */ /* Tipos básicos de estas prácticas */ #include "tipos.h" /* Estructura del superbloque */ struct Superbloque { /* DESPL. Descripción */ char magico[8]; /* 0 - Cadena de caracteres para verificar el formato */ WORD tam_bloque_fisico; /* 8 - tamaño en bytes de un bloque físico */ DWORD num_bloques_fisicos; /* 10 - cantidad total de bloques físicos */ }; #define MAGICO "SOPA123" /* Cadena identificadora de un disco */ /************************/ /* Límites y constantes */ /************************/ #define TAM_SUPERBLOQUE sizeof(struct Superbloque) #define MIN_TAMBLOQUE 96 /* para que quepa el superbloque */ /* Estas dos constantes pueden alterarse */ #define MAX_TAMBLOQUE 8192 #define MAX_TAMDISCO (1L<<24) /* 16 megabytes */ #define MAX_BLOQUES_FISICOS (MAX_TAMDISCO/MIN_TAMBLOQUE) /****************************/ /* Servicios de este módulo */ /****************************/ /* Instalación y montaje del disco */ int FabricaDisco ( const char* nombre_fichero, WORD tam_bloque, DWORD num_bloques ); int MontaDisco ( const char* nombre_fichero, int nbloques_cache ); int DesmontaDisco (void); int LeeDatosDisco ( WORD* tam_bloque, DWORD* num_bloques ); /* Lectura y escritura de bloques físicos */ int LeeBloqueFisico ( DWORD nbloque, void* bufer ); int EscribeBloqueFisico ( DWORD nbloque, const void* bufer ); enum ModoAccesoFisico { ACCESO_FISICO_LECTURA=0, ACCESO_FISICO_ESCRITURA=1 }; int AccedeBloqueFisico ( DWORD nbloque, void* bufer, enum ModoAccesoFisico ); #endif