URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1486
[ Назад ]

Исходное сообщение
"В очередной раз про таймеры..."

Отправлено XMan , 15-Мрт-03 00:45 
Извиняюсь, если подобное недавно спрашивали, но я не нашел.

Значится, имеется nss-модуль с кучей функций (getpwnam,getpwuid и т.п.). Когда программа дергает getpwna, glibc дергает ее из моего модуля. Моя функция соединяется с сервером, запрашивает данные, получает их, закрывает соединение и возвращает управление программе.
Внимание, вопрос: можно ли как-нибудь сделать, чтобы через N секунд работы программы (не моей функции, а уже существующей программы; например mc) вызывалась другая функция из моего модуля, не используя при этом сигналы SIGALRM, SIGVTALRM и SIGPROF ? Интересует для того, чтобы не закрывать соединение сразу, а подождать некоторое время - вдруг опять дернется какая-либо функция.


Содержание

Сообщения в этом обсуждении
"В очередной раз про таймеры..."
Отправлено XMan , 15-Мрт-03 00:51 
Забыл добавить на всякий случай:

linux 2.4.18
glibc 2.2.5


"В очередной раз про таймеры..."
Отправлено Soldier , 16-Мрт-03 07:54 
>Извиняюсь, если подобное недавно спрашивали, но я не нашел.
>
>Значится, имеется 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), да только руки никак не дойдут, некогда все.


"В очередной раз про таймеры..."
Отправлено XMan , 16-Мрт-03 14:48 
Имелось ввиду через N секунд после окончания работы функции.

Не хотел бы я, если честно, делать потомков с потоками. Лучше уж так пусть будет :)

> P.S. Кстати как успехи с nss? - Я тоже этой идеей загорелся(хочу правда через Interbase), да только руки никак не дойдут, некогда все.

Рабочую часть почти дописал :) Осталось окончательно утвердить протокол и саму сеть приделать. Серверную часть полностью проверил - пока работает без глюков :)
Недавно пересматривал, а потом и переписывал конфигурацию сервера. Сейчас можно указать откуда таскать данные по запросу такой-то программы с такой-то машины. Вообще из написанного конфигурация мне больше всего понравилась - достаточно гибкая уже сейчас и имеются идеи для дальнейших модификаций :)

Взявши за основу libnss_pgqsl я полностью переделал backend.c Сейчас nss-модуль вообще не зависит от какой бы то ни было базы данных. Он цепляется к своему серверу, который уже и соединяется с конкретной базой. В этом есть и недостатки и немалые преимущества. Надо будет туда еще dlopen впихнуть, дабы можно было пользовать разные базы в зависимости от конфигурации :)

PS. В этом всем деле самое интересное другое - откуда будут браться данные по запросу getpwent или getgrent.


"В очередной раз про таймеры..."
Отправлено Soldier , 18-Мрт-03 06:41 
>
>Не хотел бы я, если честно, делать потомков с потоками. Лучше уж
>так пусть будет :)

Хм. Не совсем понятно, а как ты представляешь проверку количества секунд, прошедших после вызова функции, не используя сигналы,потомков или "нитки"?

>Рабочую часть почти дописал :) Осталось окончательно утвердить протокол и саму сеть  
>приделать. Серверную часть полностью проверил - пока работает без глюков :)
>
>Недавно пересматривал, а потом и переписывал конфигурацию сервера. Сейчас можно указать откуда
>таскать данные по запросу такой-то программы с такой-то машины. Вообще из
>написанного конфигурация мне больше всего понравилась - достаточно гибкая уже сейчас
>и имеются идеи для дальнейших модификаций :)
>
>Взявши за основу libnss_pgqsl я полностью переделал backend.c Сейчас nss-модуль вообще не
>зависит от какой бы то ни было базы данных. Он цепляется
>к своему серверу, который уже и соединяется с конкретной базой. В
>этом есть и недостатки и немалые преимущества. Надо будет туда еще
>dlopen впихнуть, дабы можно было пользовать разные базы в зависимости от
>конфигурации :)
>
>PS. В этом всем деле самое интересное другое - откуда будут браться
>данные по запросу getpwent или getgrent.

Ну у меня все попроще будет :).  А вообще удачи тебе :)))


"В очередной раз про таймеры..."
Отправлено XMan , 18-Мрт-03 16:29 
> Хм. Не совсем понятно, а как ты представляешь проверку количества секунд, прошедших после вызова функции, не используя сигналы,потомков или "нитки"?

Вот потому-то я и спрашиваю :)