Я бы знал, как это сделать, используя PyGtk и PyGObject, но я никогда не делал ничего подобного в C. Однако у меня есть совет: попробуйте функцию g_io_add_watch
из GLib (котораятакже является базой для GObject).Для меня это хорошо работало в Python (и было гораздо практичнее использовать BTW), а версия Python - это просто оболочка для оригинальной функции Си.Поскольку GTK + основан на GObject, а GObject широко использует GLib, у вас уже есть эта функция в вашей среде разработки, и она должна хорошо работать с GTK +.