Проблема, с которой я работал, недавно заставила меня позаботиться о том, чтобы я мог убрать перед собой файл. Похоже на «усечение спереди», если хотите. Усечение файла на задней панели является общей операцией - что-то мы делаем, даже не задумываясь об этом. Но вырвать фронт файла? Сначала звучит смешно, но только потому, что нас обучили думать, что это невозможно. Но в некоторых ситуациях может быть полезной операция.Усекать файл перед началом
Простым примером (конечно, не единственным или обязательно лучшим примером) является очередь FIFO. Вы добавляете новые элементы в конец файла и вытаскиваете элементы из файла спереди. Файл растет со временем, и на фронте есть огромное пустое пространство. С современных файловых систем, есть несколько способов решения этой проблемы:
- Поскольку каждый элемент удален, скопируйте оставшиеся элементы, чтобы заменить его, и обрезает файл. Хотя это работает, это решение очень дорогое по времени.
- Контролировать размер пустого пространства в фронт, и когда он достигает определенного размера или процент от всего размера файла , переместить все вверх и обрезает файл. Это много более эффективно, чем предыдущее решение , но все же стоит время, когда элементов перемещаются в файл.
- Внесите круговую очередность в файл , добавив новые ноты в отверстие на перед файлом, поскольку предметы удалены. Это может быть довольно эффективным, особенно, если вы не против возможность вещей из заказать в очереди. Если вы заботитесь о заказе, есть потенциал , которому необходимо перемещать предметы вокруг. Но в общий, круговая очередь довольно легко реализовать и управляет диском пространство хорошо.
Но если была операция lop, удаление элемента из очереди было бы так же просто, как обновление маркера начала файла. Как легко, на самом деле, как обрезание файла. Почему же тогда нет такой операции?
Я немного разбираюсь в реализации файловых систем и не вижу особых причин, по которым это будет сложно. Мне кажется, что все, что потребуется, - это другое слово (возможно, слово?) Для каждой записи выделения, чтобы сказать, где начинается файл в блоке. При использовании емкостей емкостью 1 терабайт под 100 долларов США, кажется, довольно небольшая цена за такую функциональность.
Какие еще задачи можно было бы упростить, если бы вы могли удалять фронт файла так же эффективно, как вы можете усечь в конце?
Можете ли вы придумать какую-либо техническую причину, чтобы эта функция не могла быть добавлена в современную файловую систему? Другие, нетехнические причины?
Одним большого преимущества такой операции является то, что это позволит избежать циклов стирания на флэш-носителе. – Michael
Тем временем эта тема уже как ошибка на странице «усекать» linux man. Я уверен, что когда-нибудь это будет реализовано, через 20 лет после того, как я впервые попросил его – Lothar
такая же проблема, как: http://stackoverflow.com/questions/339483/how-can-i-remove-the-first-line- in-text-file-using-bash-sed-script, хотя здесь более явственно –