Да.
Если ваш заменитель open()
вызывает функцию, которая не безопасна для асинхронного сигнала, обработчик сигнала не может вызывать вашу функцию.То, что оно имеет то же имя и сигнатуру, что и стандартная функция, что является async-signal-safe, не имеет значения.То, что он вызывает замененную функцию или другие функции, безопасные для асинхронного сигнала, не имеет значения.То, что предполагаемый обработчик сигнала к функции, которая не является асинхронно-безопасной для сигнала, не будет прямым , не имеет значения.
В ответ на обновление вопроса : в случае, если функция, представленная в вопросе, вызывается как обработчик сигнала, она имеет неопределенное поведение из-за вызова mmap()
.Детали этого UB не могут быть предсказаны, по крайней мере, из соответствующих стандартов.Вот что значит «неопределенный».Нет никаких оснований полагать, что фактические и очевидные эффекты вызова open()
будут каким-то образом защищены от помех.Ни общий механизм обработки сигналов.И ничего другого в программе.
Чем дальше вы получаете от локуса UB, тем менее вероятен какой-либо заметный эффект, и тем более вероятно, что ОС его будет содержать, но UB не будет чем-то мешатьс.В принципе, это может проявляться в любых действиях или действиях вашего компьютера, таких как стирание диска, отключение вентилятора ЦП или отправка пароля хакерам.