| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Можно ли использовать дескриптор в качестве индекс |
| Автор: andrew_121 13.12.2009, 17:40 | ||
| Привет. Суть вопроса вот в чем: Мониторю события на дескрипторах при помощи epoll. Так вот интересует, можно ли дескрипторы использовать в качестве индекса?
попробовал ради эксперимента, пока работает. Только вот не понятно, насколько это безопасно? |
| Автор: MAKCim 13.12.2009, 17:44 |
совсем не безопасно ;) |
| Автор: GwinnBleidd 13.12.2009, 19:47 |
| а когда значение дескриптора станет больше 10000 что будешь делать? возможный диапазон-то огого |
| Автор: Lazin 13.12.2009, 20:25 | ||
открой для себя хэш таблицы |
| Автор: andrew_121 13.12.2009, 21:30 |
| UP. Я полагаю, что с момента выделения дескриптора, до его освобождения, его все же можно использовать в качестве индекса. Но не уверен. В общем, интересует мнение остальных. И все же это ради эксперимента. |
| Автор: Lazin 13.12.2009, 21:53 | ||
|
| Автор: MAKCim 13.12.2009, 22:07 | ||
| andrew_121, если ты используешь epoll, то epoll_event содежит поле data.ptr и с конкретным event'ом ты можешь связать объект, который будет хранить дескриптор Добавлено через 12 минут и 14 секунд
http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/include/linux/file.h#L39 |
| Автор: fry 13.12.2009, 22:33 |
| У Стивенса в "UNIX разработка сетевых приложений" дескрипторы используются в примере как индексы, однако попытки запуска примера под виндой говорят о том, что описанный вариант является непереносимым по причине х.н знает какого алгоритма выделения значения дескриптора (ИМХО просто рандом полнейший). |
| Автор: andrew_121 13.12.2009, 22:47 | ||||||||||
Я же описал, что после освобождения дескриптора, если вновь открыть файл, то он получит дескриптор с тем же номером. Т.е. если клиент отключился, дескриптор освободился, так же освобождаются все связанные с ним данные, т.е. сессия с этим клиентом завершена. Конечно, позже он может опять же подключиться, с ним будет начата новая сессия, соответственно, и новый дескриптор. Но я говорю только об одной не прерываемой сессии.
Да, да, да. Повторюсь: это просто эксперимент/любопытство.
Знаю. Так я и сделал. Но хотелось понять.
Естественно. Венда как-то по своему это реализует. А к книге CD-ROM прилагается? Если да, выложи только этот код на какой-нить файлообменник. Спасибо. |
| Автор: andrew_121 13.12.2009, 23:02 |
Я так понимаю, это уже недры open() ? Так вот, хотел начать читать от open() вглубь, так и не понял как тем сайтом пользоваться |
| Автор: MAKCim 14.12.2009, 09:41 |
| andrew_121, вот тебе open() http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/fs/open.c#L1080 ;) да, описание системных вызовов достаточно трудно найти, т. к. поиск по sys_open, sys_creat и т. д. не работает из-за того, что для определения изпользуются макросы SYSCALL_DEFINEx |
| Автор: andrew_121 14.12.2009, 10:06 |
| MAKCim, Спасибо. Ты случаем не в курсе, есть ли подобные сервисы еще? Добавлено через 1 минуту и 25 секунд наверное нет. иначе бы ты им и пользовался. Добавлено через 12 минут и 49 секунд Мдя...рано мне код ядра читать Всем спасибо. Тема закрыта. |
| Автор: MAKCim 14.12.2009, 11:27 |
куча искать по ключевым словам linux cross-reference другое дело, что на этом сайте версии обновляются параллельно их выходу |
| Автор: andrew_121 14.12.2009, 12:36 |
| MAKCim, Еще раз спасибо |
| Автор: xvr 14.12.2009, 16:19 |
| select (вместе с fd_set) используют файловый дескриптор именно как индекс. И если бы всех такое использование устраивало бы, то poll видимо не появился бы |