Un problema en el que estaba trabajando recientemente me hizo desear cortar el frente de un archivo. Algo así como un "truncado al frente", si se quiere. Truncar un archivo en el back-end es una operación común, algo que hacemos sin siquiera pensar mucho en ello. Pero cortar el frente de un archivo? Suena ridículo al principio, pero solo porque hemos sido entrenados para pensar que es imposible. Pero una operación lop puede ser útil en algunas situaciones.Truncar el archivo al frente
Un ejemplo simple (ciertamente no es el único o necesariamente el mejor ejemplo) es una cola FIFO. Está agregando nuevos elementos al final del archivo y sacando elementos del archivo desde el frente. El archivo crece con el tiempo y hay un gran espacio vacío en el frente. Con los sistemas de archivos actuales, hay varias formas de evitar este problema:
- medida que se elimina cada artículo, copie el elementos restantes hasta reemplazarlo, y truncar el archivo. Aunque funciona, esta solución es muy costosa en el tiempo.
- supervisar el tamaño del espacio vacío en la parte delantera, y cuando alcanza un tamaño o porcentaje del tamaño del archivo completo en particular, siga todo lo que hasta y truncar el archivo. Esto es mucho más más eficiente que la solución anterior , pero aún cuesta tiempo cuando los elementos se mueven en el archivo.
- Implemente una cola circular en el archivo , agregando nuevos elementos al agujero en al frente del archivo ya que los elementos están eliminados. Esto puede ser bastante eficiente, , especialmente si no te importa la posibilidad de que salga del orden en la cola. Si le importa el pedido , existe la posibilidad de que tenga que mover elementos. Pero en general , una cola circular es bonita fácil de implementar y gestiona bien el disco .
Pero si hubo una operación lop, eliminar un elemento de la cola sería tan fácil como actualizar el marcador de inicio de archivo. Tan fácil, de hecho, como truncar un archivo. ¿Por qué, entonces, no hay tal operación?
Entiendo un poco acerca de la implementación de sistemas de archivos, y no veo ninguna razón en particular por la que esto sea difícil. Me parece que todo lo que necesitaría es otra palabra (¿dword, quizás?) Por entrada de asignación para decir dónde se inicia el archivo dentro del bloque. Con unidades de 1 terabyte por menos de $ 100 dólares estadounidenses, parece un precio bastante pequeño para pagar por dicha funcionalidad.
¿Qué otras tareas serían más fáciles si pudieras cortar la parte frontal de un archivo con la misma eficiencia con la que puedes truncar al final?
¿Puede pensar en algún motivo técnico por el que esta función no se haya podido agregar a un sistema de archivos moderno? ¿Otros motivos no técnicos?
Una gran ventaja de esta operación es que evitaría ciclos de borrado de medios flash. – Michael
Mientras tanto, este tema ya es un error en la página de manual de "truncar" de Linux. Estoy seguro de que algún día se implementará, 20 años después de que lo pedí por primera vez – Lothar
mismo problema que: http://stackoverflow.com/questions/339483/how-can-i-remove-the-first-line- of-a-text-file-using-bash-sed-script aunque más explícito aquí –