Форум программистов, компьютерный форум, киберфорум
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
1

Как определить номер дескриптора в eпooл

16.02.2012, 20:50. Просмотров 949. Ответов 8
Метки нет (Все метки)


Можно ли в epoll как-то получать номер дескриптора, не используя структуру data? Дело в том, что data у меня задействована под другие нужды, а хранить она может только одно число.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2012, 20:50
Ответы с готовыми решениями:

Определить валидность дескриптора
Приветствую. Функцией CreateFile открывается COM порт, функцией CloseHandle закрывается. Перед...

В чем различия дескриптора,полученного из WinAPI функций и дескриптора, полученного из свойства Handle в классе Process?
Можно ли использовать дескриптор окна,полученный с помощью свойства Handle в классе Process для...

Определить текущее состояние дескриптора
По имеющемуся дескриптору объекта можно определить его текущее состояние. Это делается с помощью...

Как по требованию вызвать дескриптора объекта?
Здрасти! Подскажите пожалуйста, как вызвать дескриптор объекта myCar до сообщения "End of...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
8
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
16.02.2012, 21:15 2
покажи как ты используешь epoll_event.
0
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
16.02.2012, 21:31  [ТС] 3
C++
1
2
3
ev.events=EPOLLOUT | EPOLLIN | EPOLLERR;
ev.data.fd=u;
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, des, &ev);
В data я заношу не дескриптор, а другое число, u.
Проблема в том, что я могу получить это число e[i].data.u32. Но им не могу идентифицировать сокет однозначно, т.е. одно и тоже u может быть у нескольких дескрипторов.
А если передавать в ev.data.fd дескриптор, то нужно очень много переписывать, код выйдет сложнее и больше и в общем это не вариант...
Еполл ведь знает какой сокет он слушает и наверно можно как-то определять номер дескриптора? Яж его передаю вместе со структурой:
C++
1
еpoll_ctl(epoll_fd, EPOLL_CTL_ADD, des, &ev);
Или data.fd единственный идентификатор?
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
16.02.2012, 22:03 4
Цитата Сообщение от Union Посмотреть сообщение
А если передавать в ev.data.fd дескриптор, то нужно очень много переписывать
значит, это судьба.

Цитата Сообщение от Union Посмотреть сообщение
в общем это не вариант...
изначально нужно было думать.

Цитата Сообщение от Union Посмотреть сообщение
Еполл ведь знает какой сокет он слушает
он-то знает. но вот ты не узнаешь.

Цитата Сообщение от Union Посмотреть сообщение
наверно можно как-то определять номер дескриптора?
нет. epoll_event::data::fd для этого и предназначался.

обрати внимание на то, что epoll_event::data - не структура. это юнион. таким образом, он может хранить только одно значение.

а для подобных твоему случаев, в этот юнион специально добавили void *ptr;
а используется оно так:
C++
1
2
3
4
5
6
7
8
9
10
struct mydata {
   int fd;
   std::string str;
   some data...
};
 
...
 
ev.data.ptr = new mydata;
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, des, &ev);
и voila!
1
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
16.02.2012, 22:07  [ТС] 5
Да, спасибо, так и сделаю
0
Псевдослучайный
1936 / 1137 / 96
Регистрация: 13.09.2011
Сообщений: 3,206
16.02.2012, 22:49 6
Union, смотри только память так не потеряй, в этом варианте нужно будет всегда перед закрытием дескриптора эту удалять структуру.
0
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
16.02.2012, 22:52  [ТС] 7
Вот я тоже подумал...
А что если я в epoll.h подкорректирую структуру под себя?
0
Псевдослучайный
1936 / 1137 / 96
Регистрация: 13.09.2011
Сообщений: 3,206
16.02.2012, 23:01 8
Union, ага, и потом ядро с библиотеками пересобрать не забудь. Либо заботься о памяти, либо переписывай с декриптором в данных.
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
16.02.2012, 23:48 9
Цитата Сообщение от Union Посмотреть сообщение
А что если я в epoll.h подкорректирую структуру под себя?
азы жо!: http://en.wikipedia.org/wiki/One_Definition_Rule
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2012, 23:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Дан четырёхзначный номер года в форме строки. Определить номер столетия
помогите написать программу используя строки Дан четырёхзначный номер года в форме строки....

Дан номер масти и номер достоинства карты. Определить полное название
Дан номер масти m (1<=m=< 4) и номер достоинства карты k (6<= k =< 14). Определить полное название...

Указатели: определить номер строки и номер столбца в матрице по адресу элемента
Как работая на указателях,передвигаясь по матрице определить номер строки и номер столбца по адресу...

Дан номер года. Определить соответствующий ему номер столетия
2.Дан номер некоторого года(целое положительное число). Определить соответствующий ему номер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.