Pascal/Turbo Pascal - close(a);

 
Vista:

close(a);

Publicado por preludio (17 intervenciones) el 12/05/2007 02:10:59
hola gente.
tengo una pregunta:

si yo tengo un archivo binario, por ejemplo: ( archivo=file of registro).
si yo en alguna parte de un modulo hago:
supongamos que el archivo binario ya contiene datos y tiene un nombre logico para el sistema operativo..

procedure modulo_A (a:Archivo)
var dato:registro;

begin

reset(a);
while not EOF(a)do begin
read(a,dato);
MODULO_B(a,dato);

end;
close(a);
end.

1) antes de q la variable 'a' salga del MODULO_B, aunque no este escrito se realiza un close(a) por defecto dentro del MODULO_B cada vez q este modulo termina de realizar su tarea???

2) dentro de MODULO_B debo realizar un reset(a) para poder trabajar y guardar en una variable auxiliar del tipo integer donde estaba ubicado el puntero del achivo antes de ser invocado por MODULO_B?????

3) en q casos se realiza el close(a), tengo entendido q si uno no escribe esta sentencia, se realiza sola cuando terminamos de trabajar con él.

muchas gracias..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:close(a);

Publicado por Diego Romero (996 intervenciones) el 12/05/2007 05:37:23
Bien, en principio tienes mal declarado el parámetro del procedimiento. Los archivos, sea cual sea su tipo, se pasan *siempre* por referencia y no por valor, de modo que la declaración correcta del encabezado sería:

procedure modulo_A (var a:Archivo);

Respondo tus preguntas:
1) No. Ya que "a" es un parámetro pasado por referencia su estado es el mismo a cuando "entró" al procedimiento Modulo_B, es decir, si el archivo no está cerrado antes de llamar a Modulo_B, "a" "entra" a Modulo_B en ese mismo estado y sale de él en cualquier estado que Modulo_B lo haya dejado.

2) No si no quieres. Tal como dije en la respuesta anterior, lo que hagas con "a" dentro de Modulo_B afectará al archivo luego de terminado Modulo_B.

3) Sí, es cierto. En DOS cuando un programa finaliza todos los handlers a archivos usados por el mismo se cierran, de eso se encarga el sistema operativo mismo. Sin embargo en DOS hay un límite a la cantidad de handlers (es decir descriptores de archivos) que un programa puede manejar al mismo tiempo. Si tu programa usa muchos archivos es mejor cerrar los archivos explícitamente luego de que son usados. El propio .exe cuenta como un archivo abierto más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:close(a);

Publicado por preludio (17 intervenciones) el 12/05/2007 06:27:26
perfecto !!!

gracias !!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar