2013-03-12 5 views
-2

Я пытаюсь реализовать оболочку в C. Вот что. Я хочу создать дружественную историю, где, если я нажму, она перейдет в прошлое. команда.Чтение с последней строки в файле до первого в C

Теперь у меня есть файл, в котором хранится история, например history.txt. Когда я выполняю команду, я добавляю команду в текст. И сбрасывает какое-либо смещение в последнюю строку файла.

Мне нужен способ найти последнюю строку и двигаться по одной строке по команде. И двигайтесь один за другим по команде.

Прямо сейчас, у меня есть идея fgets() до -1 или что-то еще?

Любые идеи о том, как я должен начать?

Редактировать: Я могу придумать решение с использованием массива. Но есть ли способ, в котором я мало использую пространство?

+1

Прочитайте файл истории в памяти и укажите массив указателей на каждую запись? –

+0

Я думаю, что двойной круговой связанный список будет хорошим, но может быть дорогостоящим в памяти. – Kalon

ответ

2

Не утруждайте себя чтением истории из файла, когда вам нужно выполнить предыдущую команду. Просто сохраните предыдущие команды в памяти. Запишите их на диск при выходе и загрузите их при запуске. Вот как работают настоящие раковины.

+0

Так как массив? Я полагаю, вы можете использовать круговой буфер, но это может привести к переполнению памяти, если файл большой. – Kalon

+1

Нет необходимости в круговом буфере, только связанный список будет работать нормально, если вы хотите его обрезать, или простой массив, если вы всегда будете поддерживать всю историю (давайте посмотрим правде в глаза, если пользователь исчерпывает память, набрав команды, что-то еще не так). Вы можете обрезать до N строк при сохранении или сбросить дубликаты и т. Д. –

+0

Спасибо. Это помогло много, но, к сожалению, я не могу быстро принять ответ. : [ – Kalon

Смежные вопросы