Извиняюсь, если подобное недавно спрашивали, но я не нашел.Значится, имеется nss-модуль с кучей функций (getpwnam,getpwuid и т.п.). Когда программа дергает getpwna, glibc дергает ее из моего модуля. Моя функция соединяется с сервером, запрашивает данные, получает их, закрывает соединение и возвращает управление программе.
Внимание, вопрос: можно ли как-нибудь сделать, чтобы через N секунд работы программы (не моей функции, а уже существующей программы; например mc) вызывалась другая функция из моего модуля, не используя при этом сигналы SIGALRM, SIGVTALRM и SIGPROF ? Интересует для того, чтобы не закрывать соединение сразу, а подождать некоторое время - вдруг опять дернется какая-либо функция.
Забыл добавить на всякий случай:linux 2.4.18
glibc 2.2.5
>Извиняюсь, если подобное недавно спрашивали, но я не нашел.
>
>Значится, имеется 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), да только руки никак не дойдут, некогда все.
Имелось ввиду через N секунд после окончания работы функции.Не хотел бы я, если честно, делать потомков с потоками. Лучше уж так пусть будет :)
> P.S. Кстати как успехи с nss? - Я тоже этой идеей загорелся(хочу правда через Interbase), да только руки никак не дойдут, некогда все.
Рабочую часть почти дописал :) Осталось окончательно утвердить протокол и саму сеть приделать. Серверную часть полностью проверил - пока работает без глюков :)
Недавно пересматривал, а потом и переписывал конфигурацию сервера. Сейчас можно указать откуда таскать данные по запросу такой-то программы с такой-то машины. Вообще из написанного конфигурация мне больше всего понравилась - достаточно гибкая уже сейчас и имеются идеи для дальнейших модификаций :)Взявши за основу libnss_pgqsl я полностью переделал backend.c Сейчас nss-модуль вообще не зависит от какой бы то ни было базы данных. Он цепляется к своему серверу, который уже и соединяется с конкретной базой. В этом есть и недостатки и немалые преимущества. Надо будет туда еще dlopen впихнуть, дабы можно было пользовать разные базы в зависимости от конфигурации :)
PS. В этом всем деле самое интересное другое - откуда будут браться данные по запросу getpwent или getgrent.
>
>Не хотел бы я, если честно, делать потомков с потоками. Лучше уж
>так пусть будет :)Хм. Не совсем понятно, а как ты представляешь проверку количества секунд, прошедших после вызова функции, не используя сигналы,потомков или "нитки"?
>Рабочую часть почти дописал :) Осталось окончательно утвердить протокол и саму сеть
>приделать. Серверную часть полностью проверил - пока работает без глюков :)
>
>Недавно пересматривал, а потом и переписывал конфигурацию сервера. Сейчас можно указать откуда
>таскать данные по запросу такой-то программы с такой-то машины. Вообще из
>написанного конфигурация мне больше всего понравилась - достаточно гибкая уже сейчас
>и имеются идеи для дальнейших модификаций :)
>
>Взявши за основу libnss_pgqsl я полностью переделал backend.c Сейчас nss-модуль вообще не
>зависит от какой бы то ни было базы данных. Он цепляется
>к своему серверу, который уже и соединяется с конкретной базой. В
>этом есть и недостатки и немалые преимущества. Надо будет туда еще
>dlopen впихнуть, дабы можно было пользовать разные базы в зависимости от
>конфигурации :)
>
>PS. В этом всем деле самое интересное другое - откуда будут браться
>данные по запросу getpwent или getgrent.Ну у меня все попроще будет :). А вообще удачи тебе :)))
> Хм. Не совсем понятно, а как ты представляешь проверку количества секунд, прошедших после вызова функции, не используя сигналы,потомков или "нитки"?Вот потому-то я и спрашиваю :)