При некоторых условиях я хочу запланировать таймер (struct timer_list
), который работает с пользовательскими данными. function
поле этой структуры имеет действительную функцию, которая будет вызвана, и определяется следующим образом:Как передать пользовательский аргумент функции таймера linux?
void (*function)(unsigned long);
Дело в том, я хочу передать указатель вместо unsigned long
. Я знаю, что в зависимости от архитектуры преобразование int-ptr может быть или не быть безопасным, но я не мог найти, если все архитектуры выравнивают целые числа long
с указателями, так что вот мой вопрос (на самом деле, два в одном) :
Безопасно ли выполнить команду long
? void*
литье? Если нет, как мне обрабатывать аргумент unsigned long
, чтобы получить указатель данных, который я хочу в функции таймера?
Я бы этого не сделал. Должна быть причина, что параметр имеет тип unsigned long. Есть ли доступ к этой странице? –
@ bash.d Единственный комментарий для этого в manpage 'add_timer' и друзей заключается в том, что аргумент будет использоваться для разграничения между таймерами, которые выполняют одну и ту же функцию. В этом ничего нет. – Rerito
Ну, тогда попробуй пойти с предложением Иоакима. Я бы не бросил вообще! –