Entry tags:
Очень глубоко линуксовое
Если в ядрёном драйвере обработчик ioctl выглядит так:
int ioctl_hanler(struct inode *inode,
struct file *file,
unsigned int ioctl_num,
unsigned long ioctl_param)
{
unsigned long status;
switch (ioctl_num) {
case IOCTL_NUMBER:
status=internal_function();
put_user(status, (unsigned long *) ioctl_param);
rc = 0;
break;
....
}
return rc;
}то правильно ли будет звать его так:
unsigned long bar; ioctl(fd, IOCTL_NUMBER, &bar);?
То есть с самими переменными и их адресами тут нигде ничего не напутано?
no subject
1. Количество переменных должно быть таким же, как в прототипе.
2. Если функция хочет ulong, не надо подсовывать ей ulong* (указатель на ulong)
no subject
2) вот это, собственно, меня и интересует. А каким образом тогда из ядра получать данные, если не передавать туда именно адрес переменной (или структуры) ?
объявление ioctl'ного вызова выглядт при этом примерно так:
#define IOCTL_NUMBER _IOW('t', 8, unsigned long)
и на вызов ioctl с последним параметром типа ulong* компиялтор вовсе не ругается.