UNIVERSIDAD TECNICA FEDERICO SANTA MARIA

Anuncio
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA Area Electrónica
COMPUTADORES
Sede TALCAHUANO
SBM
OPERACIONES CON ARCHIVOS
usando las llamadas al Sistema Operativo
(int 21H).
Se desarrollan las funciones "HANDLE" . (Posibles sólo para versiones DOS
2.0 y superiores).
El "handle" (se puede traducir como manilla, mango o asa) del fichero o
archivo corresponde a un número que le asigna el DOS para su identificación.
El "handle" de un archivo es llamado también el Código del Archivo. Existe
"handle" preasignado para el dispositivo estándar de entrada (teclado) y es
0; para el dispositivo estándar de salida (pantalla) es 1. El dispositivo de
error estándar tiene "handle" igual a 2 (usualmente la pantalla); el
dispositivo auxiliar estándar (COM1) tiene asignado el "handle" igual a 3 y
el dispositivo de listado estándar tiene el "handle" igual a 4 (impresora
PRN o LPT1).
Si las funciones tienen éxito, el "flag" de "carry" se pone en cero. En
cambio si las funciones no son exitosas, el "flag" de "carry" se pone en 1 y
en el registro AX se anotará el código correspondiente al error producido.
Esto último se aprovecha en la programación; mediante la instrucción JC
(jump on carry)... será posible realizar la emisión de mensajes de error al
usuario, y dependientes del contenido de AX.
Una especificación ASCIIZ corresponde a una cadena de caracteres ASCII
terminada con un CERO (Zero).
LAS FUNCIONES " HANDLE ":
A) CREAR O TRUNCAR ARCHIVO; int 21H (33), función 3CH (60).
Dada una especificación de archivo ASCIIZ (cadena ASCII
terminada con Cero), esta función crea un nuevo archivo en el directorio
designado o por defecto, dentro del disco designado o por defecto. Si el
fichero designado ya existe, éste se trunca a cero bytes. En cualquier caso
se abre el fichero y se devuelve un código de 16 bits en AX , o "handle",
que utiliza el programa para accesos posteriores a dicho archivo.
Se llama con ah= 3CH
cx= atributo del archivo, según
00 normal
01 sólo lectura
02 oculto
04 de sistema.
ds:dx = segmento : offset de la especificación ASCIIZ.
Si la función tiene éxito, devuelve Flag de acarreo bajo y en AX el "handle"
1
asignado, usualmente $ 4.
Si falla, devuelve Flag de acarreo alto y en ax figura el código de error.
ax=3, no se encuentra ruta
ax=4, no hay ruta disponible
ax=5, acceso negado.
B) ABRIR ARCHIVO; int 21H (33), función 3DH (61).
Dada una especificación ASCIIZ, esta función abre un
archivo en el directorio designado o por defecto, dentro del disco designado
o por defecto. Se devuelve un código de 16 bits o "handle" que utiliza el
programa para accesos posteriores de dicho fichero.
Se llama con:
ah=3DH
al= modo de acceso (ver *)
ds:dx= segmento:offset de la especificación ASCIIZ.
(*) Bits 0-2=
000
si el acceso es para sólo lectura
001
si el acceso es para sólo escritura
010
si el acceso es para lectura/escritura
Bits 3 al 7, son 0.
A partir de la versión 3 del DOS, los bits 3 al 7 definen el acceso y la
modalidad de compartir el archivo. (Consultar la literatura).
Si la función tuvo éxito, devuelve,
Flag de "carry" bajo y en AX el "handle" del archivo. Si la función falla,
el Flag de "carry" es alto y en AX el código de error según, 1=número de
función inválido; 2= fichero no encontrado; 3= ruta no encontarda o fichero
inexistente; 4= no hay "handle" disponible; 5= acceso negado.
C) CERRAR FICHERO; interrupción 21H (33), función 3EH (62).
Dado un código de archivo o "handle", devuelto por una operación
previa exitosa de apertura o creación (funciones 3DH, 3CH, 5AH, 5BH), limpia
todos los "buffers" internos enviándolos al disco, cierra el fichero y
libera el "handle" para su reutilización. Si el fichero ha sido modificado o
extendido, se actualiza la hora, la fecha y el tamaño del fichero en la
entrada correspondiente del directorio.
Se llama con :
ah= 3EH
bx= "handle" del fichero
Si la función tuvo éxito, devuelve el Flag de acarreo en estado bajo. Si la
función falla, el Flag de acarreo tomará el estado alto y en AX se anota el
código de error. Estos serán los mismo definidos para la función anterior
(3DH) más 6= "handle" inválido o no abierto.
2
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA Area Electrónica
COMPUTADORES
Sede TALCAHUANO
SBM
D) LEER FICHERO O DISPOSITIVO, int.21H (33), función 3FH (63).
Dado un "handle" válido, procedente de una operación previa
correcta de apertura (fun. 3DH) o creación (fun. 3CH,5AH o 5BH), una
dirección de "buffer" (zona en memoria RAM) y una longitud en bytes, se
transfieren datos desde el fichero o dispositivo definido por el "handle",
al buffer". En el caso del dispositivo estándar de entrada (teclado), el
"handle" tiene asignado el valor 0.
Se llama con:
ah= 3FH
bx= "handle" del fichero o dispositivo.
cx= número de bytes a leer
ds:dx = segmento : offset de la zona "buffer".
Si la función tiene éxito, el "Flag" de "carry" toma el estado bajo y AX
contiene la cantidad de bytes leídos. En cambio, si la función no tiene
éxito, el "Flag" de "carry" estará en estado alto y AX contiene el código de
error producido (5 o 6, ver la función 3DH y 3EH).
E) ESCRIBIR EN UN FICHERO O EN UN DISPOSITIVO, int 21H (33), función 40H
(64).
Dado un "handle" válido, procedente de una operación
previa correcta de apertura (fun. 3DH) o creación (fun. 3CH,5AH,5BH), una
dirección de "buffer" (zona de memoria RAM) y una longitud en bytes, se
transfieren datos desde el "buffer" hasta el fichero o dispositivo
identificado por el "handle". El dispositivo estándar (pantalla) tiene
asignado el "handle" de valor 1.
Se llama con:
ah= 40H
bx= "handle" del fichero o dispositivo.
cx= número de bytes a escribir.
ds:dx= segmento : offset de la zona buffer.
Si la función tiene éxito, el "Flag" de "carry" toma el estado bajo y AX
contiene la cantidad de bytes escritos. En cambio, si la función no tiene
éxito, el "Flag" de "carry" estará en estado alto y AX contiene el código de
error producido (5 o 6, ver la función 3DH y 3EH).
F) BORRAR FICHERO, int 21H (33), función 41H (65).
Borra un fichero del directorio y disco especificado o por
defecto.
Se llama con ah= 41H, y ds:dx = segmento:offset es una especificación de
fichero ASCIIZ. Devuelve...
Al igual que en los casos anteriores, el "Flag" de "carry" será 0/1 y en AX
3
tendremos en el caso de falla los códigos de error 2 o 5.
G) MOVER EL PUNTERO DEL FICHERO, int 21H (33), función 42H (66).
Esta función se usa para cambiar la posición lógica
de lectura/escritura en un fichero (previamente abierto con 3DH). Para ello
se carga BX con el número del fichero ("handle") y luego se especifica la
posición nueva del puntero, cargando el AL la posición de comienzo del
puntero y el número de bytes que se quieren mover se anotan en el par de
registros CX y DX. La dirección relativa del byte en CX y DX es un entero
largo sin signo (32 bits) (CX es el más significativo y DX el menos
significativo de la dirección relativa). Entonces, la función,
Se llama con:
ah= 42H
al= código del método, según,
0 = La dirección relativa se toma desde el comienzo del fichero y el puntero
se mueve CX|DX bytes a partir de ese punto.
1= Se toma la dirección relativa desde la posición en curso, y se mueve a
partir de esa posición CX|DX bytes.
2= Se toma la dirección relativa a partir del final del fichero y se mueve
el puntero a partir de esa posición CX|DX bytes.
bx= "handle" del fichero.
cx= mitad más significativa del offset.
dx= mitad menos significativa del offset.
Si la función tiene éxito, el "flag" C=0 y DX|AX contiene el puntero del
fichero como una dirección relativa en bytes desde el principio del fichero
donde, dx= parte más significativa y ax= parte menos significativa del
puntero.
Si se realiza la función 42H con AL=2, y si se define la dirección relativa
en CX|DX igual a 0, es posible averiguar el tamaño del fichero. Si se ajusta
la dirección relativa a 0 y se pide el método 0, se vuelve al principio del
fichero.
Si la función no tiene éxito, C=1 y en ax está el código de error (1 o 6).
H) OBTENER O ASIGNAR ATRIBUTOS DEL FICHERO, int 21H (33), función 43H (67).
Obtiene o asigna atributos del/al fichero (sólo
lectura, oculto, sistema o archivo).
Se llama con:
ah= 43H
al= 00H, si se desea obtener los atributos
= 01H, si se desea asignar los atributos.
ds:dx= segmento:offset de una especificación de fichero ASCIIZ.
4
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA Area Electrónica
COMPUTADORES
En cx
Bit 5
Bit 2
Bit 1
Bit 0
se
=1
=1
=1
=1
Sede TALCAHUANO
SBM
anotan los nuevos atributos si al= 01H. Estos son,
si el archivo tiene atributo Archivo.(ver nota *1)
si el archivo es de Sistema.
si el archivo es Oculto (Hidden).
si el archivo es sólo Lectura (Read only)(ver nota *2).
(bit 0 es LSB y bit 7 es MSB)
Si la función tiene éxito, C=0 (bandera de "carry"=0) y si al=00 en cx
estarán los atributos.
Si la función falla, Carry=1 y en AX se encontrará el código de error: 1 si
el código de la función es inválido; 2 si el fichero no se encuentra; 3 si
la ruta no se encuentra o el fichero no existe; 5 si el atributo no puede
modificarse.
NOTAS:
Nota *1) Un fichero o archivo con atributo A (Archivo) se caracteriza por el
hecho que ese bit se activa cada vez que se modifica el fichero. Esto
permite identificarlos para realizar respaldos (backup). Una vez realizado
el respaldo, se le cambia este atributo al archivo, de manera de no volverlo
a respaldar a menos que se le realicen cambios en su contenido.
Nota *2) En los archivos sólo lectura se suspenden las operaciones que
intentan abrir o borrar ese fichero.
Nota *3) Otros bit de atributo importantes son:
Bit 4, identifica a un subdirectorio, pudiendo éste ocultarse al ser
tratados los directorios al igual que un archivo por parte del DOS. Otros
atributos no se le pueden cambiar.
Bit 3, identifica a una Etiqueta de Volumen; los cambios de atributos
carecen de sentido.
I) CAMBIAR DE NOMBRE A UN FICHERO, int 21H (33), función 56H (86).
Cambia el nombre de un fichero y/o mueve su entrada
de directorio a un directorio distinto, del mismo disco.
Se llama con, ah= 56H
ds:dx = segmento:offset del nombre de fichero ASCIIZ original.
es:di = segmento:offset del nuevo nombre de fichero ASCIIZ.
Si la función tiene éxito, el "Flag" C=0. Si falla, C=1 y en AX aparece el
código de error (2,3,5 o 11H = no es el mismo dispositivo).
5
6
J) OBTENER O CAMBIAR LA FECHA Y HORA DE UN FICHERO, int 21H (33), función
57H (87).
Lee o modifica las marcas de hora y fecha a un
fichero previamente abierto o creado.
Se llama con,
ah=57H
al=00, obtener hora y fecha
al=01, designar hora y fecha.
bx= "handle" de fichero.
En CX se anotará la hora y en DX se anotará la fecha, como retorno en el
caso de AL=00 y como valores anotados en el caso de asignación. La
estructura de esta información es:
CX (hora), bits b15-b11, las horas, de 0 a 23.
bits b5 -b10, los minutos, de 0 a 59.
bits b4 -b0 , número de incrementos de 2 segundos (0 a 29)
DX (fecha)
bits b9 -b15, año, con respecto a 1980.
bits b5 -b8 , mes, 0 a 12.
bits b0 -b4 , día del mes, 0 a 31.
Nota: b0 es el LSB y b15 es el MSB de la palabra de 16 bits.
Si la función tiene éxito, C=0, y si falla C=1 con el contenido de AX con el
código de error (1 o 6).
K) CREAR UN FICHERO TEMPORAL, int 21H (33), función 5AH (90).
El nombre de esta función lleva a engaño. Mediante
ésta es posible crear un archivo que no tiene nada de "transitorio". El DOS
no lo borra automáticamente; la designación obedece a otra idea.
El atributo del fichero se anota en CX según 00 si
es normal, 01H si es sólo lectura, 02H si es oculto, 04H si es de sistema.
El nombre de la cadena ASCIIZ se señala con DS:DX. La cadena ASCIIZ del
nombre de ruta o paso, debe estar lista para poder anotar a continuación el
nombre del fichero creado; significa esto que la cadena debe terminar con el
carácter de barra invertida (\) usada para señalizar rutas. Se deben añadir
12 bytes para dejar espacio suficiente para que el DOS añada la cadena con
el nombre del archivo (8 caracteres, el punto y tres caracteres de
extensión). Si no se desea especificar una ruta particular, se proporciona
al DOS una cadena nula, que indica que se debe usar el directorio activo de
UNIVERSIDAD TECNICA
TALCAHUANO
Area Electrónica
SBM
FEDERICO
SANTA
MARIA
-
Sede
7
COMPUTADORES
la unidad activa.
Si la función tiene éxito, el "flag" de "carry"
estará bajo y AX contiene el "handle" o código del fichero creado. Si la
función falla, C=1 y en AX aparece el código de error (3 o 5).
L) CREAR NUEVO FICHERO, int 21H (33), función 5BH (91).
Idéntica a la función 3CH desarrollada en estas
mismas notas, con la diferencia que la función 5BH falla cuando encuentra un
fichero del mismo nombre, en lugar de truncar dicho fichero a cero. Fallando
la función ("carry" alto), los códigos de error en AX podrán ser 3, 4, 5,
50H= si el fichero ya existe.
-o-o-o-o-o-
SBM/03/1991/wp5 - disco 2 de 360
SBM/mayo 1995 intfiles.w51 - 14
SBM/mayo 2002, intfiles.wpd, intfiles.pdf - 29
Descargar