Мне неизвестны какие-либо общие библиотеки среды Unix в C, но это не должно быть сложно реализовать.
Для примеров кода я предлагаю взглянуть на любую из реализаций хэш-таблиц gazillion (oi). Независимо от того, использует ли таблица связанный список или древовидную структуру для фактической обработки, весьма часто используется некоторая форма кэширования (например, MRU), поэтому она может дать вам представление о том, как может выглядеть реализация. Некоторые простые сборщики мусора и различное программное обеспечение, нуждающееся в алгоритме замены страниц, также могут стоить посмотреть.
По сути, вы отмечаете вещи, когда к ним обращаются, и стареете ссылки. Если вы увеличиваете возраст вещей при доступе, а не у каждого равноправного элемента, к которому вы обращались, вы, очевидно, сохраняете цикл при доступе и переносите вес на операцию истечения срока действия. Вы захотите сделать небольшое профилирование, чтобы найти общее представление о том, насколько менее недавний достаточно! Достаточно недавний для вашей задачи. Когда вы доберетесь до этой точки, вы просто обновите кеш соответственно.