[ Foro de C ]

fopen() y cantidad de archivos...

18-Jul-2007 21:16
Carlos Ruiz
2 Respuestas

Holaa:

Muchas gracias por las respuestas anteriores... pero ahora tengo otra duda... : )

Me gustaría saber:

¿Cuál es la máxima cantidad de archivos que puede abrir/crear un programa en C? ¿Y al mismo tiempo? ¿Y si los va borrando a medida que los va cerrando (de tal manera que al mismo tiempo sólo hay uno o dos abiertos)? ¿Cuántas veces puede abrir un mismo archivo? ¿Y archivos diferentes?

...ah, y casi lo olvido: Cuando se invoca la función fopen("file.dat","w") ¿El archivo "file.dat" es "transferido" por completo hacia la ram? (En vez de la opción "w" podría ser "w+", "rb" o "wr+", etc... es sólo un ejemplo.)

Espero sus respuestaaas.

Gracias por todo.

Saludos.

Carlos.


19-Jul-2007 00:44
Taisen Tetsu

Hasta donde yo se, se pueden abrir muchos archivos, pero cuantos más abras mas recursos consume. Así que en principio el tope de archivos es hasta lo que pueda procesar la máquina. Puedes abrir todos a la vez. Y si los abres y cierras habiendo uno o dos abiertos, el programa ira más fluido y mejor, a parte que es menos lioso para ti. Un mismo archivo se puede abrir infinitas veces siempre y cuando lo hayas cerrado antes de volverlo a abrir, sino te pegara una petada. y archivos diferentes igual.

Lo de la ram ahora no me acuerdo si lo mete todo en la ram o lo deja ahi abierto y segun lees con el programa va pasando a la ram o como iba.

un saludo.


22-Jul-2007 19:36
Nacho Cabanes (+83)

La cantidad máxima de ficheros que se puede abrir no depende "de C" (no creo que el estándar limite algo así), sino del sistema operativo.

Por ejemplo, en los tiempos de MsDos, en uno de los ficheros de configuración se podía indicar en una línea con la forma FILES = 20 la cantidad máxima de ficheros que se permitía que estuvieran abiertos al mismo tiempo, para no consumir muchos recursos innecesariamente.

Con los sistemas operativos actuales que son todos multitarea, y con las prestaciones de los ordenadores actuales, no existe un límite "claro" a la cantidad de ficheros que se pueden abrir de forma simultánea. Puedes contar con que podrás manipular "suficientes" ficheros a la vez. (Por supuesto, si no son a la vez, sino de forma sucesiva, el problema es menor todavía).

Y un mismo archivo lo puedes abrir tantas veces como quieras (lo mismo para varios ficheros).

Por otra, parte, cuando se abre un fichero, no se transfiere todo a la memoria RAM, sino que se reserva apenas una pequeña cantidad de memoria en la que se guarda la información básica sobre el fichero. A partir de entonces, cada vez que se lea datos del fichero (con fread, fgets, etc), se transfiere un bloque de datos del disco a RAM, pero sólo un bloque.

De hecho, para leer todo un fichero a RAM de una sola vez, tienes que hacerlo "a propósito", leyendo con "fread" un bloque cuyo tamaño sea todo el espacio ocupado por el fichero.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)