>Извиняюсь, если подобное недавно спрашивали, но я не нашел.
>
>Значится, имеется nss-модуль с кучей функций (getpwnam,getpwuid и т.п.). Когда программа дергает
>getpwna, glibc дергает ее из моего модуля. Моя функция соединяется с
>сервером, запрашивает данные, получает их, закрывает соединение и возвращает управление программе.
>
>Внимание, вопрос: можно ли как-нибудь сделать, чтобы через N секунд работы программы
>(не моей функции, а уже существующей программы; например mc) вызывалась другая
>функция из моего модуля, не используя при этом сигналы SIGALRM, SIGVTALRM
>и SIGPROF ? Интересует для того, чтобы не закрывать соединение сразу,
>а подождать некоторое время - вдруг опять дернется какая-либо функция.
Прежде всего хотедось бы уточнить, что имелось ввиду: через N секунд после запуска некой программы,через N секунд после окончания работы функции или через N секунд после установления соединения? Потому как если через N секунд после запуска некой программы, то если не ошибаюсь, это через /proc надо определять (если pid известен конечно).
У меня идея (не очень красивая правда) использовать фифо-шку + select. То бишь после отработки функции делаешь select по чтению на какую-нибудь фифо-шку. Если пришел запрос в течении какого-нибудь промежутка времени то пишешь в эту фифо-шку что-нибудь и select завершится нормально; если ничего не было, то select завершится по timeout и соединение можно закрыть(или вывать чего-нибудь). Если использовать thread, то это должно реализоваться без проблем, с fork() немного сложнее(?), но тоже реализуемо.
Хотя возможно я опять чего то не так понял, по-этому заранее SORRY если ответил невпопад :)))
P.S. Кстати как успехи с nss? - Я тоже этой идеей загорелся(хочу правда через Interbase), да только руки никак не дойдут, некогда все.
|