Как прочитать большой файл в UNIX / LINUX с ограниченной оперативной памятью? - PullRequest
3 голосов
/ 20 июня 2011

У меня большой текстовый файл (например, размер 5 ГБ).Но с ограниченной оперативной памятью (занимает 1 ГБ), как я могу открыть и прочитать файл без ошибок памяти?Я работаю на терминале Linux с установленными базовыми пакетами.

Это был вопрос интервью, поэтому, пожалуйста, не смотрите на практичность.

Я не знаю, стоит ли на него смотретьна системном или программном уровне ... Было бы здорово, если бы кто-то смог пролить свет на эту проблему.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 20 июня 2011

Читайте это символ за символом ... или X байтов за X байтов ... это действительно зависит от того, что вы хотите с ним делать ... Пока вам не нужен весь файл сразу, это работает.

(эллипсы потрясающие)

1 голос
/ 22 июня 2011

[просто комментарий] Если вы собираетесь использовать системные вызовы (open () и read ()), то чтение символов за символом вызовет множество системных вызовов, которые серьезно замедляют работу вашего приложения.Даже при наличии буферного кэша (или дискового файла) системные вызовы дороги.

Лучше читать блок за блоком, где размер блока "СЛЕДУЕТ" быть больше 1 МБ.В случае размера блока 1 МБ, вы будете выполнять 5 * 1024 системных вызовов.

1 голос
/ 21 июня 2011

Что они хотят, чтобы вы сделали с файлом?Вы что-то ищете?Извлекать что-то?Сортировка?Это повлияет на ваш подход.

Может быть достаточно прочитать файл строка за строкой или символ за символом, если вы ищете что-то.Если вам нужно просмотреть файл или проанализировать его разделы, то, скорее всего, вы захотите отобразить его в памяти.Посмотрите mmap () .Вот небольшая статья на эту тему: Отображение памяти ввода / вывода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...