Sei sulla pagina 1di 15

1 Tratamiento de cheros

Contenido

Laboratorio de Programaci on 2. ETSIT. 1o C. Apuntes del profesor Juan Falgueras Curso 2004

1. Tratamiento de cheros 1.1. Streams y cheros en disco . . . . . . . . . . . . 1.2. Caracter sticas generales de los cheros en disco 1.2.1. Tipos de cheros . . . . . . . . . . . . . 1.2.2. Ficheros de texto . . . . . . . . . . . . . 1.2.3. Gesti on general . . . . . . . . . . . . . . 1.3. Gesti on de datos: borrado, inserci on, indexado . 1. Tratamiento de cheros

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

1 1 2 5 12 12 14

Hasta ahora se ha manejado como depositario de los datos u nicamente a la memoria interna del sistema, la RAM, ya sea en forma de elementos simples, estructurados o mediante sus direcciones de memoria. Sin embargo, la comunicaci on del ordenador con los perif ericos externos no puede seguir mecanismos tan sencillos. Es necesario el uso de drivers, gestores de la comunicaci on diferentes seg un tratemos de leer/escribir en los diferentes medios externos: pantalla, teclado, disco, impresoras, comunicaciones con otros sistemas, etc. Los cheros en disco tienen un tratamiento muy especial ya que son el primer medio de almacenamiento persistente. Veremos en este tema, como acceder los cheros en particular, a un cuando los mecanismos de tratamiento puedan ser v alidos para otros perif ericos.

1.1.

Streams y cheros en disco

Una de las caracter sticas m as exitosas del sistema operativo UNIX fue la identicaci on de todos los perif ericos en cuanto a su tratamiento sencillamente como canales (streams ) o bien de entrada, o bien de salida o bien de entrada y salida a la vez. Esto signica que para UNIX un chero (una vez abierto) no es m as que un canal o stream de datos. Pero a la vez una impresora, una conexi on por internet con protocolo http, ftp o cualquier otro, son igualmente canales y las funciones que escriben y leen en la pantalla son las mismas que escriben y leen en esos canales o streams. La u nica diferencia que hay entre ellos es la manera de abrirlos. En unos casos es f acil, el protocolo de apertura es sencillo, en otras la conexi on previa puede implicar muchos procesos internos a tener en cuenta. El caso de los cheros en disco es el que nos va a ocupar en este tema. Por lo dicho, lo que ya sabemos en cuanto a escritura en pantalla de datos simples o estructurados, el signicado de un nal de l nea, la recogida de teclado de informaci on directa del usuario, no tiene ning un desperdicio. Todo ello lo usaremos con los cheros. Efectivamente los canales de salida a pantalla (cout en C++ , stdout en C), los de entrada desde teclado (cin en C++ , stdin en C), el de salida de errores (cerr en C++ , stderr en C) o el de salida de logs (clog en C++ ) no son m as que canales abiertos por defecto desde que se arranca un programa. No hace falta abrirlos, ya est an abiertos y no se deben cerrar. Pero todo lo que hemos hecho con estos canales lo podremos hacer con los cheros una vez aprendido a abrirlos como canales a nadidos a los anteriores. Hasta ahora s olo hemos usado dos canales (quiz as tambi en el de errores) en nuestros programas. Al conectar a un chero mediante un stream o canal con un chero podremos escribir en el, llenarlo de informaci on persistente o leer datos de cualquier chero nuestro anterior o externo a nuestro programa.

1.2.

Caracter sticas generales de los cheros en disco

Un chero es un almac en de datos ubicado fuera de la memoria interna, persistente, identicado mediante un nombre y un camino de acceso en una jerarqu a organizada. La lectura/escritura puede ser secuencial y/o directa. Ver Figura 1. En cuanto a su eciencia espacial y temporal debemos saber que un chero es de acceso mucho m as lento, que la memoria usual de los programas, que al igual que las estructuras de tipo array no admiten la inserci on, aunque distingui endolos de aquellos, s que admiten la ampliaci on de su tama no, su crecimiento por el nal. El tama no m aximo de un chero est a s olo limitado por el del medio que lo ubique y usualmente este tama no es mucho mayor que el de memoria principal de los programas. As pues, los cheros, por su persistencia son el medio de mantenimiento de toda la informaci on. La memoria principal, considerando la importancia de los cheros, no es m as que un almac en temporal (una pizarra ) de almacenamiento intermedio r apido de trabajo. Los cheros para nuestros programas ser an almacenes de datos, para el sistema operativo ser an tambi en almacenes de programas. A diferencia de las estructuras de datos en la memoria principal los cheros son gestionados por el sistema operativo de una manera mucho m as compleja. El principal motivo de esta complejidad es la adaptaci on necesaria entre un medio externo extra no y m as lento con la memoria principal, adaptaci on que se hace mediante mecanismos diversos, entre los cuales debemos conocer la funci on de los buers o almacenamientos de memoria intermedios temporales, donde los drivers, programas de control de los dispositivos externos de almacenamiento, depositan tras cada lectura fructuosa, los datos por lotes, para que el programa, mediante llamadas a aquellas rutinas, pueda recoger despu es la informaci on precisada. Ver la Figura 2 A la unidad de informaci on de un chero dado se la suele llamar registro y a la unidad de informaci on dentro de un registro, campo. No todos los cheros tienen claramente denidos estos elementos. Por ejemplo, un chero puede contener chas (ser an los registros) y estas, a su vez, el nombre, la edad,

Impres

CPU

CPU

pantalla

disco ficheros

teclado
Figura 1: Medios de comunicaci on de un ordenador (CPU) con el exterior.

direcci on, etc., que ser an los campos. Sin embargo cheros de gr acos, por ejemplo, pueden contener una cabecera inicial descriptora, y el resto ser una secuencia de bytes con los datos del gr aco no estructurados. El acceso a los cheros implica una primera vinculaci on del programa con chero mediante la apertura del chero que vincula al chero con el programa, estableciendo as un canal (stream) de comunicaci on. Una vez establecida la comunicaci on el programa se reere al chero no ya por su nombre, como ha sido necesario para reconocerlo inicialmente y establecer el stream sino mediante una variable que se llama manejador que el sistema operativo gestiona, podemos mediante esta referencia hacer operaciones de lectura/escritura en el chero. Para saber por d onde se est a en el chero (tanto para la lectura como para la escritura) se mantiene una sencilla variable interna indicador de posici on o cursor. El cursor indica el siguiente punto (byte) a ser accedido por defecto. Ya sea una lectura o una escritura, el cursor avanzar a tras la operaci on que se haga, avanzando como una ventana a lo largo de la estructura

directorio telefonos.dat mensajes.dat facturas.dat fichero con los datos h o posicin 0


Figura 2: Nombre del chero en un directorio por el que es accedido el contenido del mismo.

\n

q u

lineal que es el chero. Esta caracter stica hace que los cheros, como hemos dicho, sean esencialmente secuenciales. Sin embargo, una lectura puede ser incluso de un byte, s olo1 y despu es, mediante una llamada especial de posicionado podemos cambiar la posici on del cursor, de la ventana de lectura, de manera que la siguiente lectura/escritura, se puede hacer en cualquier otro lugar del cuerpo del chero. Para, por otro lado, hacer crecer un chero dado, se escribir a una posici on despu es del nal del mismo. Las posiciones que puede ocupar el cursor son siempre, si N es el n umero de bytes que tiene el chero, 1 n N + 1 siendo n el valor de la posici on del cursor. Si la primera posici on la numeramos como 0 entonces ser a 0 n N . As desde el punto de vista del programador y del usuario de los cheros, los cheros son secuencias continuas de bytes escritas sobre un medio r gido que pueden alargarse tras el u ltimo byte. El c omo el gestor de cheros se las ingenia en el sistema operativo para que esto parezca as , cuando, por ejemplo, en los discos magn eticos, los medios m as usuales, los cheros est an muy enredados unos con otros, es algo que dejamos por ahora a la imaginaci on del lector.
realidad la lectura f sica siempre ser a de un bloque usualmente del tama no de 512 bytes, o 1024, etc. dependiendo del tipo de dispositivo, disco, etc, y del tama no del buer intermedio. Lo que ocurre es que el programa de ese lote le do s olo aprovecha un byte.
1 en

La descripci on formal de un chero depende pues no s olo de su contenido, sino tambi en de la posici on temporal de su cursor, cuyo movimiento no tiene, sin embargo por qu e afectar al contenido de la estructura de datos, que es el chero. Ver Figura 3.

h o

\n

q u

Figura 3: El indicador de posici on o cursor indica el punto de la siguiente lectura/escritura y avanza conforme estas se van realizando.

1.2.1.

Tipos de cheros

Desde un punto de vista a bajo nivel todos los cheros son iguales. Esto es, todos tienen un nombre, que aunque en cada sistema operativo ha de cumplir una sintaxis, es independiente del contenido, a bajo nivel, y todos tienen un comienzo que f sicamente queda registrado en una tabla de localizaci on de cheros, por ejemplo en el disco, y una longitud (que puede ser cero). Normalmente los cheros f sicamente (a bajo nivel) van siendo escritos en el disco hasta que ocupan cada sector (o cluster) y esto hace que un chero sea una cadena de sectores hasta un u ltimo sector que normalmente le es asignado por entero aunque no tenga por qu e ocuparlo en su totalidad. Es la longitud del chero la que usualmente determina hasta d onde llega la ocupaci on en este u ltimo sector del disco. F sicamente y en especial en los discos muy usados (en los que se ha escrito y borrado muchas veces) tienden a estar fragmentados, esto es, la cadena de sectores que lo soportan no es continua, lo que hace a un menos eciente su acceso, pero de esto se ocupa la parte m as elemental del sistema operativo a bajo nivel. Para el sistema operativo, a un nivel m as alto, el nombre de los cheros se convierte en algo de vital

importancia. No en todos los sistemas operativos esto es as , pero, s por ejemplo en UNIX o MSDOS. No s olo es importante para estos sistemas el nombre y la extensi on de los cheros sino su ubicaci on dentro de la estructura de directorios de cada disco. En estos sistemas una extensi on o tipo de cheros se espera que tenga un determinado tipo de contenido interpretable por un programa u otro, siendo datos o siendo un programa y estando los datos en un formato o en otro y siendo el programa de un tipo u otro. Este peso descriptivo recae, en sistemas m as elementales como MSDOS casi en su totalidad en la extensi on del nombre del chero. En otros depende el tipo de cheros de atributos independientes del nombre que el sistema asocia a cada chero. Por ejemplo, en UNIX los cheros llevan asociados atributos de ejecuci on (x) o no indicando que son ejecutables, cuando es un directorio el que lleva ese atributo, se trata de un directorio navegable. -rw-rw-rw1 juanfc staff 243k Feb 23 01:45 1.IngSoft.pdf -rw-rw-rw1 juanfc staff 37k Feb 23 01:44 1.IngSoft.tex -rw-r--r-1 juanfc staff 2.0k Feb 23 01:45 1.IngSoft.toc -rw-r--r-1 juanfc staff 752k Apr 12 2002 IngSw.ppt -rw-r--r-1 juanfc staff 799k Mar 26 2003 IntroIngSoftw.ppt drwxrwxrwx 21 juanfc staff 714 Feb 23 02:01 grf/ Ahora bien, est a muy extendida la f ormula de reconocimiento del tipo de chero por su propio nombre, mejor dicho, por la extensi on ( ultimos caracteres tras el u ltimo punto) del chero. Cada sistema operativo y despu es de ellos, cada aplicaci on particular ha elegido extensiones para identicar el tipo de chero de que se trata. As est an, .txt, .html, .pdf, etc. As pues, dependiendo de la extensi on del nombre del chero el sistema o las aplicaciones entienden que el contenido del chero tiene una codicaci on, formato o uso distintos. Este modelo sencillo que asocia la extensi on con el contenido por ser tan sencillo es el que mejor ha funcionado de cara a la cada vez m as importante actividad de intercambio de informaci on entre sistemas impulsada por la internet.

As pues el sistema operativo se reserva una serie de extensiones para reconocer y tratar de manera apropiada determinados tipos de cheros. En UNIX, por ejemplo, se tienen .cpp o .txt para cheros de texto as tambi en .sh es una extensi on reservada para cheros que contienen programas ejecutables por el shell. Por otro lado, extensiones como txt, html, app, pdf, doc, sit, zip, etc. etc. son interpretadas universalmente por pr acticamente todos los sistemas operativos tendi endose, en esto a una obligada estandarizaci on. Por otro lado est a la cuesti on m as elemental de si el chero puede o no ser le do. Esto es, de si sus caracteres o bytes, pretenden representar las letras de la tabla ASCII para que sean legibles por las personas. El hecho de que un chero pueda ser le do es muy interesante ya que permite que se pueda utilizar con id entico signicado en diferentes plataformas. Esto le pasa por ejemplo a los cheros 2 manejados en la web , que son cheros de texto legibles y a los mensajes enviados por email. Los cheros ASCII son la codicaci on de texto como lo est a el texto escrito en una pantalla de ordenador, utilizando el signicado de los caracteres de la tabla ascii para los 128 primeros caracteres. Esto signica que en los cheros ascii se tienen caracteres (bytes) de nal de l nea, de espacio, de par entesis, de letras may usculas y min usculas, etc. Y, que, lo m as importante, cualquier sistema los puede presentar al usuario para que los lea. Particularmente el texto que estoy ahora mismo escribiendo est a siendo escrito con un editor de cheros de texto ascii, esto signica que los caracteres que pongo son los que directamente el editor guarda en el chero en el disco. El editor no introduce ning un car acter que yo no le indique ni interpreta m as que los pocos caracteres de control tipo nal-de-l nea, tabulador y espacio. Si este texto es transferido a cualquier otra m aquina, aquella lo presentar a sin problemas a cualquier otro usuario. Aunque un chero sea de tipo texto o ascii, legible, su contenido puede tener comandos para ser interpretados. Es el caso de los cheros .html y .xml.
2 hypertext

markup language

Aunque los cheros de texto ascii son m as portables y los que cada d a se est an empleando m as para almacenar todo tipo de informaci on, tienen tambi en algunas desventajas respecto a los otros: son m as largos, y por lo tanto, m as lentos, a la hora de ser procesados por la m aquina. Por ejemplo, si almacenamos una matriz de n umeros enteros positivos en forma ascii normalmente escribiremos cada n umero de una la separado por el siguiente mediante un tabulador y al nal de la la pondremos, en vez del tabulador un car acter de nal de l nea, para empezar la siguiente la. De esta forma en promedio, ya que la representaci on ascii de un n umero entero positivo puede tener hasta 5 caracteres (para el 1 2 6 = 65535), o sea, de 1 (para el 0) a 5 caracteres, pongamos que tenemos 3 caracteres para cada n umero en promedio, sumemos el car acter tabulador, son 4. Dependiendo del n umero total de las se tendr a que a nadir un n umero proporcional al tama no total del chero. Tenemos pues que una matriz de tama no n m (de n las y m columnas) tendr a: 3nm+n=3N +n caracteres. Sabemos, que esta matriz en la memoria interna ocupar a, 2nm=2N ya que son dos los bytes que ocupar a cada entero positivo. As : 3N +n 3 n 1n = + = 1,5 + 2N 2 2N 2N o sea, m as de un 50 % mayor. Ver Figura 4. Sin embargo el an alisis de cheros ascii es tambi en un peque no problema de velocidad a nadido al de espacio. O sea, son cheros m as grandes y m as lentos de analizar. Si guardamos los n umeros enteros positivos anteriores en un chero directamente tal y como est an codicados en la memoria interna, tendr amos un chero binario. Un chero binario es un chero que tiene una estructura m as r gida que los cheros ascii y no est a pensado para ser directamente volcado sobre una pantalla para ser le do por

datos 76 21091 8293 6875 8 8060 45241 4092 10 179 4537 8453

ASCII 76\n21091\n8293\n6875426\n8\n806071\n45241\n4092\n10\n179\n4537\n84531\n

binario 004C5263206568E9220008C4CB7B0B90FFC000A00B311B914A33

Figura 4: Diferencia de aspecto entre un chero guardado en modo ASCII y en forma de n umeros enteros en su representaci on binaria.

un usuario humano, sino que la informaci on que contiene est a codicada de alguna manera por alg un programa que es el que lo puede entender. Dentro de un chero binario no se pretende que haya caracteres interpretables mediante la tabla ascii, sino que pueden ser caracteres lo mismo que grupos de caracteres codicados aritm eticamente, en forma de mapa de bits (dibujos), secuencias de bits, etc. El programa que los haya escrito es el programa que los podr a leer; se da pues una fuerte simbiosis entre ambos, el formato generado y el programa que los genera; los cheros ascii son independientes del programa que los escribe, los binarios casi nunca. As , pues en cuanto al contenido tenemos cheros ascii y cheros binarios. Los cheros ascii son m as largos y, hemos dicho que m as lentos de analizar. La raz on de esta u ltima armaci on es que los cheros ascii son esencialmente secuenciales como lo es la lectura humana. Su lectura se debe hacer interpretando los signos y las palabras conforme van apareciendo as como, por ejemplo, no se puede saber a priori,

normalmente, en qu e posici on aparecer an las palabras, d onde est an los nales de l nea, etc. En un chero binario usualmente ocurre lo contrario. Dado que el tama no de cada elemento, al estar m as estructurado, es m as predecible, es posible incluso acceder directamente a las posiciones d onde se sabe que estar an los elementos. En el ejemplo de la matriz n m anterior guardada en forma binaria es f acil saber que el elemento (i, j ) estar a en la posici on i 2 m + 2 j y para leerlo o incluso reescribir directamente su valor habr a que posicionarse en aquella posici on y leer/escribir los dos bytes que haya all o queramos poner 3 all en este caso en formato de n umero entero positivo . N otese que los cheros binarios requerir an de una lectura/escritura raw, esto es, una lectura/escritura de una cantidad de bytes variable, que el que llame al procedimiento determinar a, por un lado, y por otro de un espacio en la memoria interna d onde dejar o de d onde tomar esos bytes. Esto u ltimo es especialmente delicado en el sentido de que debemos poner la referencia de un espacio suciente de memoria. Se dice que los cheros binarios permiten el acceso directo, mientras que los cheros ascii generalmente s olo permiten el acceso secuencial. Tenemos pues una clasicaci on seg un el contenido y otra (cuasisolapada), seg un la posibilidad de acceso (Ver la gura 5).
pos?

01011010110 Contenido juan->41,0

Binarios

Directo Accesibilidad

Ascii

Secuencial

Figura 5: Dos formas de clasicar los cheros.


que para calcular la posici on estamos suponiendo que 0 i < n y 0 j < m y que el chero tiene su primera posici on en la posici on 0. Si la matriz estuviese indexada como 1 i n y 1 j m, y la primera posici on del chero fuese la 1, la posici on para encontrar al elemento (i, j ) ser a (i 1) 2 m + 2 (j 1) + 1.
3 N otese

Dentro de los tipos de chero de acceso directo, especialmente, la ubicaci on de los registros suele ser de fundamental importancia y, cuando los cheros son especialmente voluminosos, no es pr actica ning un tipo de b usqueda ni secuencial, ni binaria, etc. Por otro lado la cuesti on de que los cheros no pueden ni encoger ni estirar f acilmente, hace que los borrados de los registros que contienen sea especialmente problem atica. Una soluci on usual es la de marcar como ocupados, o borrados los registros. Independientemente de esto, adem as, est a el hecho de que mantener ordenado el contenido de un chero no es muy eciente. Adem as, lo usual es que se conciban distintos criterios de ordenaci on, por lo cual, deja de tener sentido el pretender tener ordenados los contenidos de los cheros respecto a sus registros. La soluci on para el acceso eciente a estos cheros voluminosos (miles o millones de registros), es el mantenimiento de cheros de ndices. Los cheros de ndices pueden caber enteros en la memoria interna de un computador. Puede haber m as de uno para un u nico chero voluminoso de datos. Cada chero de ndices puede mantener una relaci on entre un campo clave con su ubicaci on dentro del cuerpo del chero. As , dentro del chero de ndices nos podr amos encontrar parejas DNI, por ejemplo, y un n umero entero indicando la posici on del registro correspondiente. La estructura y m etodo de manejo de los cheros de ndices sobrepasan el nivel de conocimientos necesarios para este curso. Sin embargo una gesti on sencilla de un chero de ndices es un buen ejemplo de t ecnicas de gesti on de cheros, en general.
1.2.2. Ficheros de texto

Los cheros de texto ascii s olo pueden representar el alfabeto anglosaj on y el resto, los acentos y caracteres especiales de cada idioma quedan fuera de la parte est andar e incluso quedan fuera de ninguna posible codicaci on de un s olo bayte por letra. Pi ensese por ejemplo en idiomas como el arabe, hebreo, el chino, etc etera. Para representar, dentro de los cheros de texto (e incluso dentro de otros cheros, el texto) estos caracteres se ha desarrollado un est andar mucho m as amplio que contiene a la tabla ascii como subconjunto representado como un s olo byte, pero que se reere al resto de los caracteres mediante dobles, triples e incluso hasta 6 bytes para codicar alg un car acter. Los caracteres de los idiomas m as

comunes se recogen en s olo dos, pero signos especiales (incluyendo signos matem aticos) tendr an una codicaci on m as larga. Nos referimos al los c odigos UNICODE y dentro de ellos, en particular, el de m as uso, el UTF-8, que es el que utilizan las p aginas web.
1.2.3. Gesti on general

La gesti on general de cualquier chero implica dos operaciones b asicas imprescindibles para que el sistema operativo nos permita acceder al contenido de un chero. En principio, el usuario y el programa, conocen solamente el nombre (y posiblemente la ruta de acceso en la estructura de directorios4 ); de manera que el programa utiliza ese nombre identicativo para comenzar el acceso al chero. Adem as del nombre del chero se debe indicar el tipo de uso que se va a dar al chero: lectura, lectura/escritura, reescritura de todo su contenido, borrado y reescritura, a nadido o a nadido y lectura. El proceso de apertura puede ser fallido por muchas causas, por lo que es importante que se verique siempre la correcta ejecuci on de la apertura. En C++ , la apertura del chero se puede hacer a la vez que se declara el objeto chero. Existen tres tipos de objeto chero: 1. de entrada, el chero se piensa utilizar s olo en modo de lectura. Es el modo m as seguro y que menos problemas de apertura da. 2. De salida. El chero si no exist a se crea, y si exist a se destruye su contenido antes de empezar a escribir en el, excepto que se especique que es de salida pero en modo a nadido. 3. De entrada y salida. No se destruye, se crea si no exist a y permite las dos operaciones, normalmente se utilizar a el posicionado directo en ellos entre ambos tipos de operaciones.
4 podemos decir ya la url, ya que pr acticamente ya todos los sistemas permiten tratar los cheros remotos, mediante su lugar de referencia universal, universal resource locator, que implica un protocolo de acceso de comunicaci on, un ordenador remoto en la red, y un camino dentro de la estructura de directorios de ese ordenador, y nalmente el propio nombre del chero.

As en C++ se tendr an objetos distintos en cada caso: 1. ifstream nombreObjCanalEntrada("nomfich", ios::in); ser a un caso t pico de apertura del chero ligado al objeto/canal de entrada nombreObjCanalEntrada. A partir de aqu se podr a escribir en el con los operadores usuales: nombreObjCanalEntrada <<dato <<endl; por ejemplo, o nombreObjCanalEntrada.getline(s, 256, \n); 2. ofstream nombreObjCanalSalida("nomfich", ios::out); ser a un caso t pico de creaci on o destrucci on y apertura del chero ligado al objeto/canal de salida nombreObjCanalSalida. A partir de aqu se podr a escribir en el con los operadores usuales: nombreObjCanalSalida >>dato; por ejemplo, o nombreObjCanalSalida.put(c); Si se quiere no destruir el contenido anterior sino a nadir a el: ofstream nombreObjCanalSalida("nomfich", ios::app); 3. fstream nombreObjCanalEnSal("nomfich", ios::in | ios::out); ser a un caso t pico de creaci on/apertura del chero ligado al objeto/canal de entrada y salida nombreObjCanalEnSal. A partir de aqu se podr a leer o escribir en el con los operadores usuales: nombreObjCanalEnSal >>dato; por ejemplo, o c=nombreObjCanalEnSal.get(); En estos cheros suele ser importante el reposicionado del cursor que se hace con intrucciones como nombreObjCanalEnSal.seek(n).
1.3. Gesti on de datos: borrado, inserci on, indexado

El tratamiento de cheros ascii en cuanto a la cuesti on de borrar un registro o un campo, no es muy eciente, usualmente no es lo adecuado el pretender hacer un borrado o la inserci on ad hoc en el chero sobre el disco. Lo normal en los cheros ascii es leerlos ntegramente en la memoria principal, transformarlos, si es necesario, y reescribir el chero en el disco. Esto es posible porque los cheros ascii suelen ser peque nos. Sin embargo, en los cheros binarios, la inserci on y borrado s son operaciones frecuentes y precisamente el tama no de estos cheros es una de sus caracter sticas m as importantes. Uno de los m etodos m as

comunes de tratamiento de borrado de registros (suponiendo longitudes constantes, aunque funcionar a igual si no lo fueran) es el tratamiento de tipo cursor visto en relaci on al almacenamiento de datos con inserci on en arrays en la memoria principal. La idea es la de mantener dos puntos de comienzo dentro del chero. Uno, puede ser el del primer registro, su posici on dentro del volumen del chero. El otro punto de comienzo ser a el del primer registro borrado. En ambos casos, al nal de cada registro se deber a tener escrita la posici on del siguiente (suponiendo la posibilidad de una secuencia de lectura). Esta secuencia de lectura es particularmente importante en la secuencia de registros borrados, que de esta forma se encadena dentro del chero y r apidamente se puede acceder al primer registro libre para su ocupaci on. Si ya no quedasen registros borrados y se desea a nadir un nuevo registro se deber a a nadir creciendo el tama no del chero. As mismo, los registros borrados del nal podr an f acilmente cercenarse de la longitud total del chero. En otro caso el chero podr a llegar a ocupar mucho m as espacio en el disco del que realmente requiriesen los registros existentes. En algunos casos se opta por a nadir operaciones de compactaci on antes de cerrar el chero. El a nadido de cheros de ndices optimiza enormemente el acceso a los registros directamente conociendo claves u nicas que se almacenan en cheros m as peque nos separados acompa nada cada clave de la posici on que ocupe el correspondiente registro. El borrado afectar a tambi en a este chero de claves. El chero de claves suele plantearse de manera que se pueda gestionar en la memoria principal.

Juan Falgueras Dpto. Lenguajes y Ciencias de la Computaci on Universidad de M alaga Despacho 3.2.32

Potrebbero piacerti anche