Práctica - Introducción al manejo de archivos
Enviado por Mikki • 30 de Octubre de 2018 • 3.136 Palabras (13 Páginas) • 419 Visitas
...
Para cada archivo que se accede mediante funciones FCB se genera la siguiente tabla llamada FCB:
Formato del FCB
Dirección
Tamaño
Descripción
00h
1 byte
Número de unidad (0 por defecto, 1 = A, etc) FF no permitido
01h
8 bytes
Nombre del archivo justificado a la izquierda con blancos
09h
3 bytes
Idem para la extensión
0Ch
2 bytes
Número de bloque actual (puntero al fichero). Es un número relativo al inicio del archivo, empezando por cero. Una operación de abrir lo establece en cero. Un bloque consta de 128 registros.
0Eh
2 bytes
Tamaño del registro lógico. Después de abrir y antes de lectura o escritura se puede modificar el valor por defecto de 128 (80h)
10h
4 bytes
Tamaño del fichero
14h
2 bytes
Fecha de la última escritura
16h
2 bytes
Hora de la última escritura
18h
8 bytes
Reservado
20h
1 byte
Número de registro actual dentro del bloque actual. Aunque en la apertura se establece en 0, se puede modificar para acceso directo al archivo.
21h
4 bytes
Número del registro de acceso directo para lectura/escritura, si el tamaño del registro es mayor de 64 bytes se omite el byte superior. Por ejemplo, para leer de manera directa el registro 20 (14h) estableceremos la entrada en 14000000h.
Cada operación FCB requiere la dirección de la tabla FCB en DS:DX, así como tener establecido un área de transferencia de datos (DTA) que por defecto se halla en el PSP y que viene a ser como un espacio auxiliar donde se mete o se saca información que se lee o escribe sobre los registros del archivo. Sólo puede haber establecido un solo DTA.
INT 21h - FCB
Función
Efecto
0Fh
Abre archivo
Cargamos en DS:DX la dirección del FCB. Si se ha producido algún error en la apertura del archivo la función devuelve el código FFh en AL; sino anula AL y establece el tamaño actual del archivo, la fecha, el número de bloque actual y el tamaño del registro en el FCB.
10h
Cierra archivo
Para cerrar un archivo primero hay que escribir el valor 1Ah en el primer byte de un último registro especial. A continuación debemos usar la función 10h del FCB, pasando en DS:DX la dirección de la tabla FCB, devolviendo un código de estado en AL: 0 si hubo éxito, FFh sino.
14h
Lee registro
Pasamos a DS:DX la dirección del FCB. Devuelve un código de estado en el registro AL:
00h Operación tuvo éxito
01h Fin de archivo: ningún dato fue leído
02h DTA es muy pequeña para el registro
03h Fin de archivo, el registro se leyó parcialmente y se rellenó con ceros.
15h
Escribe registro
Metemos en DS:DX la dirección del FCB. El DTA establecido contiene el registro a escribir. Si el tamaño del registro es igual al del sector, lo escribe; sino se envía a un búfer con la longitud del sector hasta que se llene, momento en el que se escribe. Si por ejemplo, cada registro es de 128 bytes (el registro estándar es de 512 bytes), esta función llena el búfer con 4 registros (4x128=512) y después escribe el búfer relleno en un sector completo de disco. Si la función ha tenido éxito, el DOS incrementa el campo del tamaño del FCB con la dimensión del registro e incrementa el número del registro actual en uno. Cuando el número del registro actual supera 127, se anula y se incrementa el número del bloque actual del FCB. Se devuelven los siguientes códigos de estado:
00h Operación tuvo éxito
01h Disco lleno
02h DTA muy pequeña para el registro
16h
Crea archivo
Metemos en DS:DX la dirección del FCB. Si existe en el directorio un archivo con el nombre indicado en el FCB, lo trunca, sino lo crea. Después inicializa el tamaño del archivo a cero y lo abre, inicializando el bloque actual FCB a cero
Devuelve en AL el código de estado:
00h Espacio disponible
FFh No hay espacio disponible
1Ah
Establece el área de transferencia de disco DTA
En DS:DX metemos la dirección del búfer que contendrá el DTA. Por defecto, ésta se situará en la dirección 80h del PSP. Sólo puede haber un DTA activo en cualquier momento.
21h
Lectura directa de registro
Una vez establecido el DTA
...