Отправляет email-рассылки с помощью сервиса Sendsay

ioctl передача параметров

Здравствуйте!

Есть драйвер символьного устройства. Им (устройством) нужно управлять и
при этом передавать параметры. Но никак не получается =(

В драйвере:

kop_ioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct thread *td)
{
printf("ioctl = [%d]; data = [%d]\n", cmd, *(int *)data);
return(0);
}

в программе:

int param;
param = 321;
...
ioctl(kop_dev, 123, &param);
...

Драйвер пишет:
ioctl = [123]; data = [0]

Почему 0? Как правильно передать параметр?

Ответить   Mon, 25 Oct 2004 18:55:25 +0400 (#250687)

 

Ответы:

Здравствуйте.

Вы писали 25 октября 2004 г., 18:55:25:

Вопрос из серии "тихо сам собою левою рукою" =)
Но может кому понадобиться. разрешил так:

#define GPIB_IOCTL_SELECTDEVICE _IOW('g', 1, char)
(взял из исходников isa/gpib.h)

в драйвере:

...
switch (cmd) {
case GPIB_IOCTL_SELECTDEVICE:
current_device = *(char*)data;
printf("Device selected [%x]\n", *(char*)data);
break;
...

в проге:
...
ioctl(f, GPIB_IOCTL_SELECTDEVICE, &byte);
...

только не совсем понятно с "_IOW" что оно делает и что значит 'g'
(в разных исходниках различно... как будто "от балды" берется)

Ответить   Wed, 27 Oct 2004 21:16:02 +0400 (#251973)