Какой смысл имеют т.наз. reentrant functions (не знаю как по-русски) в коде ядра или библиотек, напр., функция open содержит не код, а просто внешний интерфейс к какой-нибудь функции навроде _open_r. Зачем такая вложенность?
1. Далеко не везде реализация выглядит именно так.
2. reentrant функция нужна для того, чтобы в момент её выполнения можно было бы вызвать эту же функцию ещё раз, например в случае многопоточного приложения или обработки сигнала. В случае reentrant функции гарантируется корректное поведение всех одновременно вызванных "копий" этой функции в процессе.Простой пример не reentrant функции:
char * f_not_reentrant ()
{
static char buf [...];/*
... заполняем буфер
*/
return buf;
}Пусть при выполнении этой функции процесс перехватывает сигнал.
В этом случае, если в обработчике сигнала вызывается f_not_reentrant,
то вывод первоначально вызванной функции может быть неверным.