Сам Posix не определяет способ назначения функции обратного вызова, вызываемой при поступлении последовательных данных. Стандартный способ сделать этот тип обработки, если вы не хотите использовать отдельный поток, это использовать библиотечную функцию select
. Это позволяет программе определить набор файловых дескрипторов, которые интересуют вашу программу, и затем перейти в спящий режим. Select автоматически активирует ваш процесс, если с одним из дескрипторов файлов, к которым вы заявили интерес, произойдет что-то интересное (например, новые данные станут доступны для чтения). Это позволяет избежать необходимости ждать и опрашивать несколько дескрипторов активности.
Другим вариантом может быть использование библиотеки, например libevent, которая расположена поверх слоя Posix и обеспечивает инфраструктуру обратного вызова. http://monkey.org/~provos/libevent/