Представим себе ситуацию, когда есть библиотечная функция, в которой подряд идут несколько блокирующих системных вызовов (например read). void foo() { ... read(...); // First call ... read(...); // Second call ... } Для меня критично, чтобы вызов этой функции уложился в 3 секунды: alarm(3); foo(); alarm(0); Обработчик сигнала ALRM определён пустым. Проблема в том, что сигнал ALRM прервёт 1-й read (вызов вернёт ошибку и errno станет равно EINTR). Но если функция не обрабатывает эту ситуацию, то она _навсегда_ зависнет во втором вызове read! Т.к. речь идёт о произвольной библиотечной функции, то нельзя делать предположений о количестве блокирующих системных функций в ней. Как решать подобную проблему (т.е. гарантированно прервать вызов произвольной функции)?